在创建一个进程池或简单地循环一个进程以创建更多的进程之间有任何区别(在任何方面)吗?
这两者有什么区别?
pool = multiprocessing.Pool(5)
pool.apply_async(worker)
pool.join()这个呢?
procs = []
for j in range(5):
p = multiprocessing.Process(worker)
p.start()
procs.append(p)
for p in procs:
p.join()池是否更有可能使用更多的核心/处理器?
发布于 2013-08-14 04:37:32
池的apply_async方法将只在池中任意选择的进程上运行worker函数一次,因此您的两个代码示例不会做完全相同的事情。要真正做到这一点,您需要调用apply_async五次。
我认为哪种方法更适合某项任务,这在一定程度上取决于你在做什么。multiprocessing.Pool允许您在每个进程中执行多个作业,这可能使程序更容易并行化。例如,如果您有一百万个需要单独处理的项,您可以创建一个具有合理数量的进程的池(可能就像您有CPU核那样多),然后将百万项的列表传递给pool.map。池将将它们分发给各个工作进程(并收集要返回给父进程的返回值)。启动100万个单独的进程将不太实际(它可能会破坏您的操作系统)。
另一方面,如果您有少量的任务要并行执行,并且您只需要完成每项任务一次,那么对每个任务使用一个单独的multiprocessing.Process可能是非常合理的,而不是设置一个池,启动作业然后拆卸池。
https://stackoverflow.com/questions/18220402
复制相似问题