最近,我开始用Python进行多进程处理。这段代码:
#!/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根据这里的文档和其他线程,所以我无法找出上面代码中的进程安全问题在哪里。
我有一种感觉,我错过了一些微不足道的东西。有人能发现问题所在吗?有没有办法确保安全,即输出将正确地放入和获取每个字符,并且只有一次?
我在Windows上使用Python 2.7。
发布于 2016-07-18 06:19:10
通过使用itertools生成字符,解决了这个问题。这个问题似乎是由python对bytearray的处理引起的。
https://stackoverflow.com/questions/38426031
复制相似问题