多处理python中的类变量

2024-06-16 09:23:39 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码:

import multiprocessing
import dill

class Some_class():

    class_var = 'Foo'

    def __init__(self, param):
        self.name = param

    def print_name(self):

        print("we are in object "+self.name)
        print(Some_class.class_var)

def run_dill_encoded(what):
    fun, args = dill.loads(what)
    return fun(*args)


def apply_async(pool, fun, args):
    return pool.apply_async(run_dill_encoded, (dill.dumps((fun, args)),))


if __name__ == '__main__':

    list_names = [Some_class('object_1'), Some_class('object_2')]

    pool = multiprocessing.Pool(processes=4)
    results = [apply_async(pool, Some_class.print_name, args=(x,)) for x in list_names]
    output = [p.get() for p in results]
    print(output)

它返回错误:

^{pr2}$

没有print(Some_class.class_var)行,代码可以正常工作。访问类变量有什么问题,两个对象都应该有它,我不认为进程应该对此产生冲突。我错过什么了吗? 关于如何排除故障有什么建议吗?不要担心run_dill_encodedapply_async,在python3.x上编译multiprocess之前,我一直在使用这个解决方案

注:这已经足够了,但是stackoverflow想让我写更多的细节,不知道该放什么。在


Tags: nameinselfasyncobjectvardefargs