使用队列列表进行Python多处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用队列列表进行Python多处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1806字,纯文字阅读大概需要3分钟。
内容图文
![使用队列列表进行Python多处理](/upload/InfoBanner/zyjiaocheng/786/5abe382e3d6345e19dad121bb8dce1a1.jpg)
我尝试使用Python 2.7多处理包创建队列列表.每个子进程拥有一个单独的队列,并有两个任务:从自己的队列中获取元素并将元素放到其他子进程的队列中.因此,每个子进程必须知道哪个队列属于它,这就是我使用队列列表的原因.
我的代码如下:
mgr = multiprocessing.Manager()
sharedQueueList = mgr.list()
for i in xrange(num_processes):
sharedQueueList .append(mgr.Queue())
但是,我收到以下错误消息:
**raise convert_to_error(kind, result)**
RemoteError:
---------------------------------------------------------------------------
Unserializable message: ('#RETURN', < Queue.Queue instance at 0x02AD3170 >)
---------------------------------------------------------------------------
解决方法:
在父项中创建队列列表,在创建时为每个员工提供一些队列.每个工作人员将从其中一个队列中获取作业,并输出到另一个队列.
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
内容总结
以上是互联网集市为您收集整理的使用队列列表进行Python多处理全部内容,希望文章能够帮你解决使用队列列表进行Python多处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。