为什么这个python队列代码处理项目多次?
问题描述:
以下是我创建的测试用例。为什么每个流程都打印1到5的数字,并且是没有在流程中划分的数字?为什么这个python队列代码处理项目多次?
代码:
#!/usr/bin/python
from subprocess import *
from Queue import Queue
from Queue import Empty
import multiprocessing
from multiprocessing import Process
def main():
r = Runner()
r.run()
class Runner(object):
processes = []
def run(self):
q = Queue()
for t in range(1,6):
q.put(t)
for pi in range(1,4):
p = Process(target=self.runFromQueue, args=(q,))
p.start()
self.processes.append(p)
for p in self.processes:
p.join()
print "Finished!"
def runFromQueue(self, q):
try:
while True:
number = q.get_nowait()
print str(number)
q.task_done()
except Empty:
pass
if __name__ == "__main__":
main()
输出继电器:
$ ./test_threads.py
1
2
3
4
5
1
1
2
3
2
4
3
5
4
5
Finished!
预计输出继电器:
$ ./test_threads.py
1
2
3
4
5
Finished!
答
队列包不处理知道,它仅适用于线程。下面您的示例中发生的情况:
- 创建队列,并与数字
- 拨叉4流程填写。这将复制存储内容到每个子流程,包括填充队列
- 每个进程清空其队列
你必须使用由多道提供的Queue类的副本。
噢,这就是它。谢谢! – 2010-03-08 12:58:14