为什么这个队列是这样的呢? [英] Why does this queue behave like this?

查看:18
本文介绍了为什么这个队列是这样的呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个从多处理队列提取的对象,我发现当我运行这段代码时,我得到data = []。然而,如果我告诉程序在指定的位置休眠一小段时间,我会得到data = [1,2],这是它应该得到的。

from multiprocessing import Queue
import time

q = Queue()
taken = 0
data = []

for i in [1,2]:
  q.put(i)
# time.sleep(1) making this call causes the correct output 
while not q.empty() and taken < 2:
   try:
     data.append(q.get(timeout=1))
     taken+=1
   except Empty:
     continue

**EDIT:**如果While循环之前有一条print语句,也会发生这种情况。这表明对q.put()的调用发生了一些问题,但我找不到有关此问题的任何文档。

推荐答案

在用于多处理的docs中提到。队列

注意将对象放入队列时,该对象将被浸泡,并且 后台线程稍后会将已派生的数据刷新到基础 烟斗。这产生了一些令人惊讶的后果,但 应该不会造成任何实际困难-如果他们真的 然后,您可以改用使用管理器创建的队列。

  1. 之后 将对象放在空队列中可能有无穷小 队列的Empty()方法返回FALSE和GET_NOWAIT()之前的延迟 可以在不提高Queu.Empty的情况下返回。 ...

这篇关于为什么这个队列是这样的呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆