我有一个程序瓶颈是API调用,所以我想让API调用同时完成。在伪代码中,这就是我想要的:
from multiprocessing import Process, Manager
urls = ['www.example.com/item/1', 'www.example.com/item/2', 'www.example.com/item/3']
def get_stats(url, d):
data = http.get(url)
d[data['name']] = data['data']
manager = Manager()
d = manager.dict()
for url in urls:
p = Process(target=get_stats, args=(url, d))
p.start()
p.join()
print d
唯一的问题是这些流程似乎并不是并行运行的。
是因为我在开始流程后放置了join()
吗?
实施此方法的最佳方法是什么?
答案 0 :(得分:1)
这些进程似乎没有并行运行
“启动循环”中的join()
等待每个进程在开始下一个进程之前终止。
尝试这样的事情,而不是:
procs = []
for url in urls:
p = Process(target=get_stats, args=(url, d))
p.start()
procs.append(p)
for p in procs:
p.join()
您可能还想查看答案
Pool with worker Processes,至于您的工作量,使用process Pool
似乎是一个好主意。