我正在尝试使用multiprocessing.Pool来对一组类对象上的操作进行并行化。
obj= []
for i in range(20):
obj.append(myClass(i))
pool= multiprocessing.Pool(processes=4)
pool.map(do_something, obj)
pool.map(do_something_else, obj)
和myClass及其函数do_something和do_something_else是这样的..
class myClass:
def __init__(self,i):
self.obj_id= i
self.value= 0
def do_something():
self.value = self.value + 1 #some operations
def do_something_else():
self.value = self.value * 99 #some operations
我该如何进行并行化?并且obj中原始对象的“值”会更新吗?任何人都可以帮我解决问题吗?提前谢谢。
答案 0 :(得分:0)
map
函数不调用对象列表上的方法,而是调用每个对象作为第一个参数的函数。
因此你需要一个辅助函数:
def _call_do_something(obj):
obj.do_something ()
return obj
# ...
obj_list = pool.map(_call_do_something, obj_list)
由于这会产生一个需要通过导入找到_call_do_something
的新进程(至少在Windows上),所以将它作为模块级函数。