关于 Python 中多进程的问题,求大佬解答

关于 Python 中多进程的问题,求大佬解答,第1张

关于 Python 中多进程的问题,求大佬解答,第2张

通过 multiprocessing 创建的进程池,但是现在的问题是程序执行完毕之后不不退出程序,在 pycharm 上还是运行的状态,但是什么也不打印,就一直卡着不结束,除非手动结束掉,求各位大佬解答下。
pool = multiprocessing.Pool(processes=5)
for i in content:
# task(i)
# 维持执行的进程总数为 processes,当一个进程执行完毕后会添加新的进程进去
pool.apply_async(func=task, args=(i,))
pool.close() ----------------------- 以下是精选回复-----------------------

答:我认为我的程序已经是执行完毕了的,因为我每个子进程结束后有会标记。 退一步来说,如果是我的某个进程没有结束,那如何观察是卡在哪里了呢
答:这个场景考虑 gdb 来调试
答:print 大法好
答:不给代码的盲改... 现在都流行这个了么, 靠猜的话, 我猜你没 join
答:我也是小白,我来说点意见,也不知道自己对不对,错了请大家指出,apply_async() 是非阻塞的,你主进程不会停在这句话上的,直接运行到这段代码下面去了,而子进程才刚被调用开始执行。
为什么不用 pool.map((func=task, args=(i,))
子进程运行的时候,阻塞住主进程,等待所有子进程完成,返回运行结果的 list,代码执行才往下走。
下面再处理子进程的结果,然后 pool.close()
如果你本身就是要求不管子进程执行完没有,那就不是我说的情况了,join 子进程或者子进程 sys.exit(0)
答:process:都是先执行父进程,再到子进程。子进程不退出,父进程就会等他结束后再结束。join 堵塞的意思,写了这个,那就卡住了,要执行完才会往下走。用这个的话,就可以控制顺序:先执行子进程,再执行主进程。这样说你理解了吧?多跑下官方的 demo 你就知道了
答:第一:使用进程池,进程任务出现错误不会再主进程中显示,就是子进程出错,子进程结束,主进程继续,如果要捕获子进程错误,自己写个错误收集的装饰器,
答:如果想让子进程的错误在主进程中捕获并显示,最好只用最原始的方式创建进程池
list_1 = []
for i in range(xxx):
m = multiprocessing.Process(target=fun,args=(,))
list_1.append(m)
m.start()
for i in list_1:
i.join()
答:target 函数是循环 or 阻塞的?

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 关于 Python 中多进程的问题,求大佬解答

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情