Unjx. 2022-01-23 19:18 采纳率: 84.6%
浏览 125

python如何同时执行一个函数多次?

问题遇到的现象和发生背景

我通过requests和etree得到了一个图片的url列表,然后我把列表里的每一个值都放到我创建的队列里面去
然后我写一个download方法,这个download方法就负责下载图片,至于图片的url则从队列里面拿,队列可以拿一个少一个,每次拿最前面的就好了,然后图片的名字就是url的后36位字符
接下来我所需要的就是同时执行download函数多次
如果我一次一次来执行download函数的话,需要50次,差不多1min
但如果我一次能够执行5个download函数,那只需要10次,约等于10s
我就是不知道怎么同时去执行5个download函数
对于同一个函数,怎么将它同时执行多次?

运行结果及报错内容

这个代码没有报错,能跑,但什么结果也没有,一张图片都没爬回来

问题相关代码
from multiprocessing import Pool, Queue 
import requests
from lxml import etree 


class imgbinspider(object):


    def get_html(self,url): 
        # Get the coding of the webpage↓
        html = requests.get(url=url,headers=head).content.decode('utf-8')

        res_xpath = etree.HTML(html)
        # Put the url corresponding to the picture in the list↓
        img_url_list = res_xpath.xpath(str('//img/@data-src')) 
 
        # Define a queue↓
        url_queue = Queue() 

        # Put all the elements in the list into the queue↓
        for i in range(len(img_url_list)):
            url_queue.put(img_url_list[i]) 

        self.name = 0
        
        # Return a queue↓
        return url_queue 


    def download(self):
        imgurl = Url_Queue.get()
        # Get pictures↓
        image = requests.get(url=imgurl,headers=head).content 

        with open('E:\PythonFile\爬虫\实验品\多进程\爬虫\imgbin\图片\{}.jpg'.format(self.name),'wb')as f:
            f.write(image)

            self.name+=1


if __name__ == '__main__':
    head={'user-agent': 'Mozilla/5.0'}
    weburl = "https://imgbin.com/free-png/naruto"
    spider=imgbinspider()

    pool=Pool(5)

    Url_Queue = spider.get_html(weburl)

    i = 0
    while i<11:
        pool.apply_async(func=spider.download)
        i+=1
    
    

  • 写回答

1条回答 默认 最新

  • 爱音斯坦牛 全栈领域优质创作者 2022-01-23 19:31
    关注

    学一下多进程,多线程,携程

    评论

报告相同问题?

问题事件

  • 创建了问题 1月23日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog