我如何让多个进程在 python 多进程中更新同一个字典
How do i get multiple processess to update the same dictionary in python multiprocess
我有一个程序,其瓶颈是 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()
?
实现这个的最佳方法是什么?
these processes don't seem to be running in parallel
您的 "starter loop" 中的 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, as for your workload, using a process Pool
似乎是个好主意。
我有一个程序,其瓶颈是 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()
?
实现这个的最佳方法是什么?
these processes don't seem to be running in parallel
您的 "starter loop" 中的 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, as for your workload, using a process Pool
似乎是个好主意。