python - 多处理时在哪里调用 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秒!.
推荐阅读
- php - PHP:在while循环中减去1年时,年份不会改变
- javascript - react-push-notification 不适用于 React Router
- visual-studio-code - 是否可以从 Visual Studio Code 扩展中启动 React 应用程序?
- docker - Docker 卷装载在 Azure DevOps Pipeline 中不起作用
- java - 如果数组中不存在字符串,则在循环中创建 else 条件
- sql - 为什么这两个 SQL 查询在效率上如此不同?
- python - 正则表达式重复匹配?嵌套组?
- python - tkinter,笔记本,选择一个笔记时如何执行一个 def?
- asp.net-mvc - 2 分钟后使用 https 协议再次调用 ASP.NET MVC 操作方法
- javascript - 是否可以在文件尚未完全下载的情况下播种文件?