多处理不保留结果
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
中设置属性finished
为True
,输出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))
我尝试运行以下多处理代码:
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
中设置属性finished
为True
,输出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))