We. 发表于 2020-11-5 10:14

【破案了】python多进程为何会产生僵尸进程?如何处理?

本帖最后由 We. 于 2020-11-6 15:53 编辑

这个问题破案了昂。代码没问题的,任务也在跑,是ppt网站的服务器的问题,附上效果图。

速度还行40多秒。我觉得还能更快。


之前研究python爬虫多进程批量下载ppt,全部代码详见https://www.52pojie.cn/thread-1291914-1-1.html。

代码运行倒是没问题也不报错,关键是下载一部任务之后就不动了。
后来我把下载链接单独提取出来测试如下图:



代码刚跑起来的时候是有流量的,每个进程都在干活。过了一段时间以后如下图:

流量没了! 这是为啥?任务还没跑完为啥就卡在这了???
请各位指正!


测试代码如下:
from time import perf_counter
import requests
import multiprocessing

def RequestsDX(url):
    headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                     'Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.51',
      'Accept'   : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,'
                     'application/'
                     'signed-exchange;v=b3;q=0.9'
    }
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf-8'
    return response

def down_load(download_list): # 开始下载
    response = RequestsDX(download_list)
    print('=' * 100)
    print('正在下载', download_list)
    with open(r'D:\ppt\%s.zip' % download_list, 'wb') as f :
      for chunk in response.iter_content(chunk_size=1024) :
            f.write(chunk)
    print('下载完成')


if __name__ == '__main__':
    download_list = [
      ('通用工作述职汇报PPT模板', 'http://www.youpinppt.com/soft/201013/1-201013195921.zip'),
      ('大气黑灰工作述职报告PPT模板', 'http://www.youpinppt.com/soft/200905/1-200Z5205113.zip'),
      ('新员工转正述职报告PPT模板', 'http://www.youpinppt.com/soft/200816/1-200Q6052914.zip'),
      ('炫彩烟雾水彩总结述职PPT模板', 'http://www.youpinppt.com/soft/200707/1-200FH33044.zip'),
      ('极简试用期转正述职报告PPT模板', 'http://www.youpinppt.com/soft/200623/1-200623103147.zip'),
      ('极简工作述职报告PPT模板', 'http://www.youpinppt.com/soft/200528/1-20052Q11T6.zip'),
      ('极简述职工作报告PPT模板', 'http://www.youpinppt.com/soft/200426/1-200426210042.zip'),
      ('办公桌面述职报告PPT模板', 'http://www.youpinppt.com/soft/200331/1-200331100H5.zip'),
      ('大气实用述职报告PPT模板', 'http://www.youpinppt.com/soft/200316/1-200316055252.zip'),
      ('立体岗位竞聘述职报告PPT模板', 'http://www.youpinppt.com/soft/200206/1-200206152Q2.rar'),
      ('蓝绿渐变述职报告PPT模板', 'http://www.youpinppt.com/soft/190725/1-1ZH5093211.rar'),
      ('淡雅朦胧述职报告PPT模板', 'http://www.youpinppt.com/soft/190326/1-1Z326091335.rar'),
      ('箭头通用述职报告PPT模板', 'http://www.youpinppt.com/soft/180823/1-1PR30Z355.rar'),
      ('简约三角风述职报告PPT模板', 'http://www.youpinppt.com/soft/180802/1-1PP2091F0.rar'),
      ('大气山峰述职报告PPT模板', 'http://www.youpinppt.com/soft/180724/1-1PH4235446.rar'),
      ('简约通用述职报告PPT模板', 'http://www.youpinppt.com/soft/180419/1-1P41Z92J5.rar'),
      ('简约蓝色述职报告PPT模板', 'http://www.youpinppt.com/soft/180112/1-1P112100122.rar'),
      ('简约大气工作述职报告PPT模板', 'http://www.youpinppt.com/soft/171229/1-1G22ZU636.rar'),
      ('简约实用述职报告PPT模板', 'http://www.youpinppt.com/soft/171003/1-1G003101554.rar'),
      ('唯美小清新竞聘述职PPT模板', 'http://www.youpinppt.com/soft/170330/1-1F330031506.rar'),
      ('创意个人简历竞聘述职PPT模板', 'http://www.youpinppt.com/soft/170227/1-1F22F04025.rar')
    ]

    t = perf_counter()
    pool = multiprocessing.Pool(10)
    for i in download_list:
      pool.apply_async(down_load, (i,))

    pool.close()
    pool.join()

    t1 = perf_counter()
    cost = t1-t
    print(cost,'s')

枼小天 发表于 2020-11-5 10:32

线程池改成from multiprocessing.dummy import Pool

xunxunmimi0936 发表于 2020-11-5 10:32

看着简单,实则我不会做啊。

longzhouming 发表于 2020-11-5 10:35

首先 应该尝试不用pycharm来运行多进程的python脚本

xilidexiao 发表于 2020-11-5 10:59

又看到你了{:301_1001:}

代码没错误 资源链接问题简约大气工作述职报告PPT模板的链接 响应极慢 所以进程还是处于工作状态 没有退出

yao5201478 发表于 2020-11-5 11:18

python调用idm下载多好

We. 发表于 2020-11-5 11:43

枼小天 发表于 2020-11-5 10:32
线程池改成from multiprocessing.dummy import Pool

能说说为啥要这样做吗?跟直接从multiprocessing中调用有啥区别吗?

We. 发表于 2020-11-5 11:48

xilidexiao 发表于 2020-11-5 10:59
又看到你了

代码没错误 资源链接问题简约大气工作述职报告PPT模板的链接 响应极慢 所以进 ...

我太难了,我自学的找不到人问只能寄希望于发帖子了。
另外我问过站主了,他买了cdn按道理说不应该这么慢啊。

We. 发表于 2020-11-5 11:50

longzhouming 发表于 2020-11-5 10:35
首先 应该尝试不用pycharm来运行多进程的python脚本

为什么啊?

枼小天 发表于 2020-11-5 14:34

We. 发表于 2020-11-5 11:43
能说说为啥要这样做吗?跟直接从multiprocessing中调用有啥区别吗?

多进程 场景CPU密集程序
from multiprocessing import Pool

多线程 场景IO密集程序
from multiprocessing.dummy import Pool
页: [1] 2
查看完整版本: 【破案了】python多进程为何会产生僵尸进程?如何处理?