我有一个名为run_3_processes
的函数,它使用multiprocessing.pool.apply
生成3个进程(duh),等待它们的结果并处理这些结果并返回单个结果
我有另一个名为run_3_processes_3_times
的函数,它应该并行运行run_3_processes
3次,等待所有函数返回,然后处理所有结果
我尝试过的事情:
run_3_processes_3_times
使用进程池——结果证明这很复杂,因为Python Process Pool non-daemonic?run_3_processes_3_times
使用threadpool.apply
是因为run_3_processes
中的apply
阻塞了GIL吗?出于某种原因,这使得它可以串行运行,而不是并行运行李>我肯定我错过了一个简单的解决方案。。。谢谢
由于您使用的是真正的线程和子进程的组合,因此您将“某种程度上”遇到GIL,但它的结构方式似乎不太可能成为问题。
ThreadPool
将受到上下文切换的影响,以提供线程之间的并发性,但由于它的唯一目的是生成子进程,因此它不会做任何CPU密集型的事情。我甚至不知道为什么需要使用多个线程;我可能只需要一个单线程的父进程spawn并直接等待子进程在这两个函数中,使用
map()
方法而不是apply_async()
可能更为惯用,尽管两者都可以工作。通常看起来有点像这样:好的,找到了一个老套的答案,我很想听听有没有更好的:
相关问题 更多 >
编程相关推荐