我如何在python中使用multiprocessing.Pool.map来实现对象中的函数?

时间:2014-03-26 06:11:08

标签: python multiprocessing

我正在尝试使用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中原始对象的“值”会更新吗?任何人都可以帮我解决问题吗?提前谢谢。

1 个答案:

答案 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上),所以将它作为模块级函数。