我一直在尝试了解多处理在 python 中的工作原理,并创建了一个非常简单的脚本来测试我的理解。
一切似乎都工作正常,除了在一个进程中,在 while 循环之后发生的任何值分配似乎都没有完成。
如果我用 for 循环替换 while 循环,或者完全删除它,一切似乎都按预期工作。
这是main.py:
from timepieces import Stopwatch
def run():
watch = Stopwatch()
watch.start()
can_count = 0 if (raw_input('Press q to stop and see seconds counted') == 'q') else 1
watch._can_count.value = can_count
print watch.get_seconds()
if __name__ == "__main__":
run()
timepieces.py 文件(包含创建和控制进程的类):
from multiprocessing import Process, Value
import time
import math
class Stopwatch:
_count_val = None
_proc = None
_can_count = None
def count_seconds(self, can_count, count_val):
seconds = 0
count_val.value = 23
#print can_count.value == 1
while can_count.value == 1:
seconds += 1
count_val.value = seconds
def start(self):
self._count_val = Value('i', 0)
self._can_count = Value('i', 1)
self._proc = Process(target = self.count_seconds, args = (self._can_count, self._count_val))
self._proc.start()
def get_seconds(self):
return self._count_val.value
任何想法表示赞赏。