可以这样做吗?
我的想法如下:
我会有一个dict,每个子进程都会添加一个新的键:值组合到dict。
这可以通过多处理完成吗?有没有限制?
谢谢!
答案 0 :(得分:2)
如果您只想读取子流程中的数据,并且每个孩子都会添加单个键值对,则可以使用Pool
:
import multiprocessing
def worker(x):
return x, x ** 2
if __name__ == '__main__':
multiprocessing.freeze_support()
pool = multiprocessing.Pool(multiprocessing.cpu_count())
d = dict(pool.map(worker, xrange(10)))
print d
输出:
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
答案 1 :(得分:1)
Yes, Python supports multiprocessing
因为你打算为每个“进程”使用相同的dict,我建议multi-threading而不是多处理。这允许每个线程使用相同的dict,而不必混淆将来自不同进程的数据发送到父级的dict中。
显然,如果您的输入方法取决于用户或来自stdin,那么您将遇到问题。但是如果你从文件中获取输入,它应该可以正常工作。
我建议this博客帮助您使用线程池。它还(有些)解释了multiprocessing.dummy的使用,而docs则没有这样做。
答案 2 :(得分:1)
如果您使用多处理,则需要将条目传播到“父进程字典”,但有一个解决方案:
使用多处理是有帮助的,因为那个人称为GIL ...所以是的,我确实没有考虑使用它,因为它正在充分利用核心。但我使用经理。像:
a_manager = multiprocessing.Manager
然后我用作共享结构:
shared_map = a_manager.dict()
并且在启动流程工作者的调用中:
worker_seq = []
for n in range(multiprocessing.cpu_count()):
worker_seq.append(multiprocessing.Process(target=my_work_function, args=(shared_map,))
以前的艺术很像: