多处理时在何处调用join()

卡尼瓦龙

在Python中使用多重处理时,我通常会看到一些示例,其中join()在一个单独的循环中调用了函数,而该循环实际上是创建每个进程的地方。

例如,这:

processes = []

for i in range(10):
    p = Process(target=my_func)
    processes.append(p)
    p.start()

for p in processes:
    p.join()

比这更常见:

processes = []

for i in range(10):
    p = Process(target=my_func)
    processes.append(p)
    p.start()
    p.join()

但是据我了解join(),它只是告诉脚本在该过程完成之前不要退出。因此,何时join()调用无关紧要那么,为什么通常在单独的循环中调用它呢?

埃里克·施塔斯汀(ErikŠťastný)

join() 正在阻止操作。

在第一个示例中,您启动了10个进程,然后等待所有过程完成。所有进程同时运行。

在第二个示例中,您一次启动一个进程,然后等待完成,然后再启动另一个进程。同时只有一个正在运行的进程

第一个例子:

def wait()
    time.sleep(1)

# You start 10 processes
for i in range(10):
    p = Process(target=wait)
    processes.append(p)
    p.start()

# One second after all processes can be finished you check them all and finish
for p in processes:
    p.join()

整个脚本的执行时间可以接近一秒钟

第二个例子:

for i in range(10):
    p = Process(target=wait) # Here you start one process 
    processes.append(p)
    p.start()
    p.join() # Here you will have to wait one second before process finished.

整个脚本的执行时间可以接近10秒!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在队列为空之前调用join时,Python 3多处理队列死锁

在使用Mockito进行单元测试时,如何处理ThirdParty类的静态方法调用?

多处理时不调用回调

Python多处理:异常时如何关闭多处理池

Python多处理调用对象方法

从套接字读取时如何处理阻塞read()调用?

多处理功能未调用Python 3

满足条件时终止多处理进程

调用外部模块时,多处理池变慢

当文件数超过限制时,如何处理通过multer中的上载调用创建的错误?

调用$ resource失败时,我该如何处理?

System.nanoTime()在调用之间返回相同值时如何处理?

当对象调用其超类的方法时如何处理?

调用IContextMenu时如何处理重命名操作?

调用API时如何处理网络中断

当迭代次数足够高时,Dask 多处理失败,循环并行,包括调用 MongoDB

调用 Ember 中的 destroyRecord 时如何处理请求?

Python多处理不调用函数

在另一个进程准备好之前调用 Condition.notify() 时 Python 多处理死锁

使用多处理写入文件时出错

使用 Xamarin MessagingCenter 调用异步方法时如何处理异步和等待?

运行脚本时使用多处理

在 Cython 中包装 C 代码时如何处理调用约定?

单元测试时如何处理API调用率限制?

在使用 python 多处理时使用 pool.map 时是否有理由调用 join ?

调用公共方法时如何处理 IllegalAccessException

当我调用 process.start() 时,Python 多处理进程只会停止我的代码运行

对于以后的调用,Python 多处理调用变得更慢

使用 tqdm 作为进度条时来自多处理的 join() 输出