首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >multiprocessing.Queue和multiprocessing.Queue

multiprocessing.Queue和multiprocessing.Queue
EN

Stack Overflow用户
提问于 2012-05-29 07:37:56
回答 1查看 1.3K关注 0票数 2

我正在尝试使用多处理和队列来实现生产者-消费者场景;主要进程是生产者和两个子进程,它们使用来自队列的数据。这在没有什么不寻常的事情发生的情况下有效,但问题是,我希望能够重新启动工作人员,以防他们死亡(kill -9 workerpid)。但是,当我杀死一个或两个工作人员时,他们开始说“队列是空的”,即使主进程一直在队列中填充数据。

我在这里错过了什么?(在Ubuntu 12.04上使用Python2.7.3)

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-29 08:50:24

你见过文件中的警告吗?:

警告 如果进程在尝试使用队列时使用Process.terminate()或os.kill()终止,则队列中的数据可能会损坏。这可能会导致任何其他进程在以后尝试使用队列时获得异常。

因此,杀死使用队列的进程会使整个队列不可用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10794903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档