python - Python 多处理不使用可用的核心
问题描述
我在简单的 Python 程序下面运行 - 分别执行 4 个进程。我希望程序在 4 秒内完成执行(正如您在代码中看到的那样),但它需要 10 秒 - 这意味着它不进行并行处理。我的 CPU 中有超过 1 个内核,但程序似乎只使用了一个。请指导我如何在这里实现并行处理?谢谢。
import multiprocessing
import time
from datetime import datetime
def foo(i):
print(datetime.now())
time.sleep(i)
print(datetime.now())
print("=========")
if __name__ == '__main__':
for i in range(4,0,-1):
p = multiprocessing.Process(target=foo, args=(i,))
p.start()
p.join()
print("Done main")
解决方案
每当您调用join
一个进程时,您的执行都会阻塞并等待该进程完成。因此,在您的代码中,您总是在开始下一个过程之前等待最后一个过程完成。您需要保留对进程的引用以及join
在所有进程启动后对它们的引用,例如。像这样:
if __name__ == '__main__':
processes = [multiprocessing.Process(target=foo, args=(i,))
for i in range(4,0,-1)]
for p in processes:
p.start()
for p in processes:
p.join()
print("Done main")
推荐阅读
- c# - 试图在 Swift 中复制 C# POST 调用
- javascript - 在javascript中按字典顺序对数组进行排序
- node.js - 在 node.js 应用程序之间共享 MongoDb 连接
- elasticsearch - 弹性:尝试初始化同义词标记过滤器时出错
- android - PANIC:启动模拟器时损坏的 AVD 系统路径
- php - php - mysqli_fetch_assoc to to json 编码数组适用于大多数查询,但不适用于其他查询(尽管查询返回有效结果)
- python - 生成公共/私人比特币密钥
- html - Moving variable text to the right side
- c - Why won't my File.dat be read and run and how can I assign the data to a struct? - C
- python - 如何在包含每小时平均值和每小时每个平均值的相应计数的数据帧末尾添加新列。