在 parent 中创建 s 列表,Queue
在创建时将一些交给每个 worker。每个工人将从其一个队列中获取作业,输出到另一个队列。
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')
示例运行:
[INFO/MainProcess] setup
[INFO/worker] child process calling self.run()
[INFO/worker] start
[INFO/worker] got 0
[INFO/worker] got 1
[INFO/worker] got 2
[INFO/worker] got None
[INFO/worker] exiting
[INFO/worker] process shutting down
[INFO/worker] process exiting with exitcode 0
[INFO/MainProcess] done
[INFO/MainProcess] process shutting down