Python 中 Queue 的用法?
我使用几个生产者得到了一些数据,希望写入 multiprocessing 库创立的 Queue 中,然后由一个消费者读取并做后期处理,请问怎么样写才好,我用 while true 的方式一直假死。
这是主要代码:
q = multiprocessing.Queue(1001)
if __name__ == '__main__':
q = multiprocessing.Queue(1001)
pool = multiprocessing.Pool(processes=10)
for year in [2008]:
if year is not None:
pool.apply_async(solve_year, (year,))
pool.apply_async(consume)
pool.close()
pool.join()
在生产者中使用了:
for i in b.list_():
info_detail = InfoDetail(i)
for i in info_detail.get_dict():
d[i] = d[i].encode('utf-8')
if d.has_key('status'):
continue
q.put(d)
这是消费者的部分代码:
while not q.empty():
d = q.get(block=True)
print d
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Queue中的队列被取空了? 然后Get就阻塞了?
贴个代码看看
下面这行在Queue为空的情况下是会阻塞的,由于没有设置timeout,会一直阻塞到Queue中有数据为止:
另外在多进程中使用empty()判断是不稳定的:
因为当时check时是empty,但check完可能已经被其它进程塞入数据了,
或者当时check时不是empty,但check完可能已经被其它进程取光数据变成empty了。
文档也是这么说的: