如何在Python中对对象中的函数使用multiprocessing.Pool.map?
我正在尝试使用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
我该如何进行这种并行处理呢?原始对象中的'值'会被更新吗?有没有人能帮我找到解决办法?提前谢谢大家。
1 个回答
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系统上是这样),所以最好把它放在模块的顶层。