使用队列列表的Python多处理

2024-10-01 17:30:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Python2.7多处理包创建队列列表。每个子流程拥有一个单独的队列,有两个任务:从自己的队列获取元素,并将元素放入其他子流程的队列中。因此,每个子流程都必须知道哪个队列属于它,这就是为什么我使用队列列表。在

我做了如下代码:

mgr = multiprocessing.Manager()

sharedQueueList = mgr.list()

for i in xrange(num_processes):
  sharedQueueList .append(mgr.Queue())

但是,我收到了以下错误消息:

^{pr2}$

Tags: 代码in元素列表for队列manager流程
1条回答
网友
1楼 · 发布于 2024-10-01 17:30:06

在父级中创建Queue的列表,在创建时向每个工作线程传递一些。每个工作线程将从其一个队列获取作业,然后输出到另一个队列。在

import logging, multiprocessing

def myproc(arg):
    return arg*2

def worker(qlist):
    logger = multiprocessing.get_logger()
    logger.info('start')
    while True:
        job = qlist[0].get()
        logger.info('got %s', job)
        if job is None:
            logger.info('exiting')
            return
        qlist[1].put( myproc(job) )

logger = multiprocessing.log_to_stderr(
    level=logging.INFO,
)
logger.info('setup')

numProcs = 3
queueList = [ multiprocessing.Queue() for i in xrange(numProcs) ]

# prefill with 3 jobs
for num in range(3):
    queueList[0].put(num)
# signal end of jobs
queueList[0].put(None)

worker_p = multiprocessing.Process(
    target=worker, args=( [queueList[0], queueList[1]], ),
    name='worker',
)
worker_p.start()

worker_p.join()

logger.info('done')

示例运行:

^{2}$

相关问题 更多 >

    热门问题