为了账号安全,请及时绑定邮箱和手机立即绑定

multiprocessing.pool的apply_async()多个任务不执行?

multiprocessing.pool的apply_async()多个任务不执行?

墨色风雨 2019-03-16 12:59:47
问题描述我要爬百度里的一些图片,因此这里使用multiprocessing.pool进程池,当我调用多个apply_async()时却发现,进程池里的任务都没执行问题出现的环境背景及自己尝试过哪些方法假设定义进程池 def f(args, *kwargs):import os,timeprint("pid:%d, now wait 5S...\n" % os.getpid())time.sleep(5)print("pid:%d, wait end...\n" % os.getpid())pool = multiprocessing.Pool(3)a = pool.apply_async(f)b = pool.apply_async(f) <- 这里连续调用4个apply_async()c = pool.apply_async(f)d = pool.apply_async(f)pool.close()pool.join()程序是执行的,能够显示4个任务,如果我连续调用6次apply_async()却发现任务都没有执行,我不知道为什么会这样。相关代码// 请把代码文本粘贴到下方(请勿用图片代替代码)from multiprocessing import Process, Pipedef f(args, *kwargs):import os,timeprint("pid:%d, now wait 5S...\n" % os.getpid())time.sleep(5)print("pid:%d, wait end...\n" % os.getpid())if name == '__main__':from multiprocessing import Pool pool = Pool(3)# pool.map(f, list(range(10)))a = pool.apply_async(f) b = pool.apply_async(f) c = pool.apply_async(f) d = pool.apply_async(f) e = pool.apply_async(f) f = pool.apply_async(f) print('adding 6 task to pool...') pool.close() pool.join()运行程序,很快就结束。而6个任务没有执行。。。。。不懂为啥。你期待的结果是什么?实际看到的错误信息又是什么?这个apply_async怎么用?难道进程池不能使用apply_async多个任务?但我看了pool的源码,它可是有任务队列暂存任务的啊。
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

如果没有要传的参数就这么定义:
def f():

查看完整回答
反对 回复 2019-03-16
?
富国沪深

TA贡献1790条经验 获得超9个赞

否则apply_async中也要传递f的参数。定义和使用时要一致

查看完整回答
反对 回复 2019-03-16
  • 3 回答
  • 0 关注
  • 5522 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信