Python类继承多处理,访问类成员时遇到麻烦

前端之家收集整理的这篇文章主要介绍了Python类继承多处理,访问类成员时遇到麻烦前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
简而言之,我说有以下内容
import multiprocessing

class Worker(multiprocessing.Process):
    def __init__(self):
        multiprocessing.Process.__init__(self)
        print "Init"
        self.value = None

    def run(self):
        print "Running"
        self.value = 1

p = Worker()
p.start()
p.join()
print p.value

我希望输出为:

Init
Running
1

相反,它是

Init
Running
None

有人可以向我解释为什么会这样吗?我不理解的是什么,我该如何正确地做到这一点?

谢谢.

解决方法

你说p.start()的那一刻,一个单独的进程就分离出了主进程.将复制所有变量值.因此主进程有一个p副本,分叉进程有一个单独的p副本. Worker修改分叉进程的p.value副本,但主进程的p.value仍为None.

有许多方法可以在进程之间共享对象.在这种情况下,也许最简单的方法是使用mp.Value

import multiprocessing as mp

class Worker(mp.Process):
    def __init__(self):
        print "Init"
        mp.Process.__init__(self)
        self.num = mp.Value('d',0.0)

    def run(self):
        print "Running"
        self.num.value = 1

p = Worker()
p.start()
p.join()
print p.num.value

请注意,mp.Value的默认值为0.0.它不能设置为None.

原文链接:https://www.f2er.com/python/186397.html

猜你在找的Python相关文章