私はマルチプロセッシングが Python でどのように機能するかを学ぼうとしており、私の理解をテストするための非常に単純なスクリプトを作成しました。
プロセス内で while ループの後に発生する値の割り当てが完了していないように見えるという事実を除いて、すべてが正常に機能しているように見えます。
while ループを for ループに置き換えるか、完全に削除すると、すべてが期待どおりに機能するように見えます。
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
どんな考えでも大歓迎です。