kyl*_*lex 1 python multithreading python-multithreading python-2.7
创建进程池或简单地循环一个进程以创建更多进程之间有什么区别(以任何方式)?
这有什么区别?:
pool = multiprocessing.Pool(5)
pool.apply_async(worker)
pool.join()
Run Code Online (Sandbox Code Playgroud)
和这个?:
procs = []
for j in range(5):
p = multiprocessing.Process(worker)
p.start()
procs.append(p)
for p in procs:
p.join()
Run Code Online (Sandbox Code Playgroud)
池是否更有可能使用更多核心/处理器?
池的方法apply_async只会worker在池中任意选择的进程上运行该函数一次,因此您的两个代码示例不会执行完全相同的操作。要真正实现等效,您需要调用apply_async五次。
我认为哪种方法更适合给定任务取决于您正在做什么。multiprocessing.Pool允许您在每个进程中执行多个作业,这可能使您的程序的并行化变得更加容易。例如,如果您有一百万个项目需要单独处理,您可以创建一个具有合理数量的进程(可能与 CPU 核心数一样多)的池,然后将百万个项目的列表传递给pool.map. 该池会将它们分配给各个工作进程(并收集要返回给父进程的返回值)。启动一百万个单独的进程将不太实用(它可能会破坏您的操作系统)。
另一方面,如果您有少量作业需要并行执行,并且您只需要每个作业完成一次,那么为每个作业使用单独的作业可能是完全合理的,multiprocessing.Process而不是设置一个池,启动作业然后拆掉水池。
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |