多处理时调用Join()的位置

Where to call join() when multiprocessing(多处理时调用Join()的位置)
本文介绍了多处理时调用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()应该无关紧要。那么为什么通常在单独的循环中调用它呢?

推荐答案

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秒!

这篇关于多处理时调用Join()的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)