下面是一個簡單塞奇納羅:更新相同的實例變量來自不同進程的
class Test:
def __init__(self):
self.foo = []
def append(self, x):
self.foo.append(x)
def get(self):
return self.foo
def process_append_queue(append_queue, bar):
while True:
x = append_queue.get()
if x is None:
break
bar.append(x)
print("worker done")
def main():
import multiprocessing as mp
bar = Test()
append_queue = mp.Queue(10)
append_queue_process = mp.Process(target=process_append_queue, args=(append_queue, bar))
append_queue_process.start()
for i in range(100):
append_queue.put(i)
append_queue.put(None)
append_queue_process.join()
print str(bar.get())
if __name__=="__main__":
main()
當你在main()
函數結束調用bar.get()
爲何仍返回一個空列表?我該如何做到這一點,以便子進程也適用於Test
的同一個實例,而不是一個新實例?
所有答案讚賞!