0
最近、私はPythonでマルチプロセッシングを始めました。このコード:Process、JoinableQueueプロセスの安全性
#!/usr/bin/env python
from Queue import Empty
from multiprocessing import Process, JoinableQueue
def _print():
while True:
try:
p = q.get(True, 3)
except Empty:
return
else:
print "Got: " + p
q.task_done()
return
def _generate():
pw = bytearray(1);
for pw[0] in range(ord('a'), ord('z') + 1):
q.put(pw)
print "Put: " + pw
if __name__ == '__main__':
q = JoinableQueue()
t = Process(target=_generate)
t.start()
t = Process(target=_print)
t.start()
q.join()
が私にこの出力を与える:
Put: a
... # Correct order a-z and no duplicates
Put: z
Got: a
Got: b
Got: d
Got: d
... # Missing characters and duplicates
Got: z
ここで私は上記のコードでは、プロセスの安全性の問題がどこにあるかを把握するために管理することができませんでしたSO上のドキュメントや他のスレッドによると、 。
私は何かが些細なことを見逃していると感じています。誰でも問題を見つけることができますか?これを安全にする方法はありますか?つまり、出力はすべての文字を正しく配置し、一度だけ取得しますか?
私はWindowsでPython 2.7を使用しています。