如何让多个进程在python多进程中更新相同的字典

时间:2015-09-14 15:11:12

标签: python python-multiprocessing

我有一个程序瓶颈是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()吗?

实施此方法的最佳方法是什么?

1 个答案:

答案 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似乎是一个好主意。