我无法找到对这个问题的任何提及,这似乎是微不足道的。
甚至可以在multiprocessing Pool
之间的Pythons工作者之间共享对象吗?
这是一个小例子:
from multiprocessing import Pool
def work(a):
return do_work(obj_b)
def main(obj_a, obj_b):
my_iterable = get_iter(obj_a)
p = Pool(processes=6)
res = p.map(work, my_iterable)
让我们说get_iter(obj_a)返回一个可迭代对象。
"work"
如何知道obj_b?
答案 0 :(得分:1)
答案 1 :(得分:1)
在阅读了很多材料之后,我意识到了一些事情:
下面是代码:
from multiprocessing import Pool, cpu_count
def work(a):
print("I'm aware of obj_b: {}".format(obj_b))
def initPoolResources(_obj_b):
# Define all your shared read obj here
global obj_b
# Initialize them
obj_b = _obj_b
def main(obj_a):
# Assume obj_a is an iterable object
# We want to create a "shared read only" object between the pool of processes.
p = Pool(processes=cpu_count()-1, initializer=initPoolResources, initargs(obj_b))
result = p.map(work, obj_a)
p.close()
p.join()
工作(a)从未见过obj_b,但他完全了解它。