多处理不保留结果

Multiprocessing Not Keeping Results

我尝试运行以下多处理代码:

import multiprocessing

class test(multiprocessing.Process):
    def __init__(self, name):
        multiprocessing.Process.__init__(self)
        self.name = name
        self.finished = False

    def run(self):
        print("executed")
        self.finished = True

test_list = []
test_list.append(test('first'))
test_list.append(test('second'))

for t in test_list:
    t.start()

for t in test_list:
    t.join()

for t in test_list:
    print(t.finished)

并得到结果:

executed
executed
False
False

False 输出看起来很奇怪。我在方法run中设置属性finishedTrue,输出executed表明run方法已经执行。而且,如果我在方法 run 中的 self.finished=True 之后立即添加一行 print(self.finished),输出将是 True。为什么 class 属性 finished 在多处理完成后发生变化?

谢谢!

self.finished = True 在另一个进程中执行,只更改该进程中的变量,但您正在打印主进程中的值。您需要共享的变量。

from multiprocessing import Process,Value
from ctypes import c_bool

class test(Process):
    def __init__(self,name):
        super().__init__()
        self.name = name
        self._finished = Value(c_bool,False)

    def run(self):
        print(self.name,'executed')
        self._finished.value = True

    @property
    def finished(self):
        return self._finished.value

if __name__ == '__main__':
    test_list = [test('first'),
                 test('second')]

    for t in test_list:
        t.start()

    for t in test_list:
        t.join()

    for t in test_list:
        print(t.finished)

这将允许您在进程之间共享完成的值。它使用 multiprocessing.Value 使用共享内存创建共享对象。

from multiprocessing import Process, Value

class test(Process):
    def __init__(self, name, fin):
        Process.__init__(self)
        self.name = name
        self.finished = fin

    def run(self):
        print("executed")
        self.finished.value = True

test_list = []
test_list.append(test('first', Value('b', False)))
test_list.append(test('second', Value('b', False)))

for t in test_list:
    t.start()

for t in test_list:
    t.join()

for t in test_list:
    print(bool(t.finished.value))