Unk*_*own 2 python queue multiprocessing
我正在尝试使用多处理和队列来实现生产者 - 消费者场景; 主进程是生产者和消耗队列数据的两个子进程.这种方法有效,但没有任何异常情况发生,但扭曲的是我希望能够重新启动工作人员,以防他们死亡(kill -9 workerpid).但是,当我杀死一个或两个工作者时,即使主进程将数据填入队列,他们也会开始说"队列为空".
我在这里错过了什么?(在Ubuntu 12.04上使用Python 2.7.3)
import sys
import time
import multiprocessing
from Queue import Empty
workers = []
fqueue = multiprocessing.Queue()
class Worker(multiprocessing.Process):
def run(self):
queue = self._args[0]
print "{0} starting up, queue at: {1}".format(self.pid, queue)
while True:
try:
obj = queue.get(block=True, timeout=1)
print "{0}: got from queue: {1}".format(self.pid, obj)
except Empty:
print "{0}: queue was empty".format(self.pid)
continue
except IOError, e:
print "{0}: got IOError on queue: {1}".format(self.pid, e)
return
if __name__ == "__main__":
print "zipper starting up (2 workers)"
for _ in range(0, 2):
p = Worker(args=(fqueue,))
workers.append(p)
p.start()
cnt = 0
while True:
for i in range(0, len(workers)):
p = workers[i]
if not p.is_alive():
print "main: worker {0} is not alive".format(p.pid)
p = Worker(args=(fqueue,))
print "main: restarted worker: {0}".format(p)
p.start()
workers[i] = p
print "main: tick"
cnt += 1
fqueue.put(cnt)
time.sleep(2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |