来自具有可连接队列的python多处理池的RuntimeError

时间:2015-03-04 10:13:11

标签: python python-multiprocessing

我在使用两个多处理时看到退出时出现RunTime错误。每个都有一个不同的可连接队列。下面是一个显示问题的简单代码示例。

import multiprocessing
import time

q_1 = multiprocessing.JoinableQueue()
q_2 = multiprocessing.JoinableQueue()

def process():
    pool_1 = multiprocessing.Pool(1, worker_1,(q_1,))
    pool_2 = multiprocessing.Pool(1, worker_2,(q_2,))
    for i in range(3):
        q_1.put(i)
    q_1.join()
    q_2.join()
    pool_1.close()
    pool_2.close()

def worker_1(input_q):
    while True:
        val = input_q.get(True)
        print("1:"+str(val))
        q_2.put(val)
        input_q.task_done()

def worker_2(input_q):
    while True:
        val = input_q.get(True)
        time.sleep(2)
        print("2:"+str(val))
        input_q.task_done()

当退出时我收到以下错误

Exception RuntimeError: RuntimeError('cannot join current thread',) in <Finalize object, dead> ignored

我有两个可用的环境,

Ubuntu 12.04.3 LTS,python 2.7.3 - 我收到了错误。

RHEL 6.3,python 2.6.6 - 我没有收到错误。

搜索关闭()后加入池的大多数建议,但如果我这样做,则该过程永远不会退出。此外,我发现的所有示例只有一个池,而不是两个或更多(使用单个池/队列不会产生错误)。

有什么导致此错误的想法?

0 个答案:

没有答案