魔道书生 发表于 2020-3-26 18:42

python多进程不快反慢

如题
用pool函数创建进程池之后
执行速度反而更慢
求大佬给个多线程或者多进程下载图片的例子

nstar1221 发表于 2020-3-26 18:54

一般卡在网速上,试试协程

猫南北爱上狗东西 发表于 2020-3-26 19:01

代码看看

卫国 发表于 2020-3-26 19:21

人生苦短,我爱Python

魔道书生 发表于 2020-3-26 19:42

nstar1221 发表于 2020-3-26 18:54
一般卡在网速上,试试协程

已解决 谢谢大佬关注

魔道书生 发表于 2020-3-26 19:44

猫南北爱上狗东西 发表于 2020-3-26 19:01
代码看看

已解决 谢谢大佬关注
希望能给个多进程模板

非法菜鸟 发表于 2020-3-26 19:58

下载图片属于io密集型操作 选用多线程 或协程操作比较合适   在cpu密集型操作中多进程的优势比较明显

猫南北爱上狗东西 发表于 2020-3-26 20:02

import requests
from scrapy import Selector
from concurrent.futures import ThreadPoolExecutor
from queue import Queue

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'
}


class BoundedThreadPoolExecutor(ThreadPoolExecutor):
    def __init__(self, max_workers=None, thread_name_prefix=''):
      super().__init__(max_workers, thread_name_prefix)
      self._work_queue = Queue(max_workers * 2)


def get_href():
    # 获取所有url
    hrefs = []
    url = 'https://www.2717.com/ent/meinvtupian/list_11_1.html'
    res = requests.get(url=url, headers=headers)
    res.encoding = 'gb2312'# respose重新编码
    html = res.text
    # 获取目录页所有链接
    sel = Selector(text=html)
    lis = sel.xpath("//div[@class='MeinvTuPianBox']//li")
    for li in lis:
      a = li.xpath('.//a')
      href = a.css('::attr(href)').extract()
      href = 'https://www.2717.com' + href
      hrefs.append(href)
    return hrefs


def parser_img(href):
    print(href)


if __name__ == '__main__':
    hrefs = get_href()
    executor = BoundedThreadPoolExecutor(max_workers=8)
    for href in hrefs:
      executor.submit(parser_img, href)

葫芦炒鸡蛋 发表于 2020-3-26 20:28

魔道书生 发表于 2020-3-26 19:44
已解决 谢谢大佬关注
希望能给个多进程模板

我写了个多进程爬虫框架,你可以去看看。pypi搜MultiprocessingSpider
页: [1]
查看完整版本: python多进程不快反慢