多重跟不上结果
问题描述:
我试图运行下面的代码多:多重跟不上结果
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
输出看起来很奇怪。我已经设置了属性finished
是在方法run
True
,且输出executed
表明run
方法已被执行。而且,如果我的方法run
self.finished=True
后添加一行print(self.finished)
立即输出将True
。为什么在多处理完成后类属性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))
+0
This Works,thanks! – Craig
答
的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)
t.finish在其他进程中更新,而不是在主进程中更新。请参阅:https://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes – gammazero