繁体   English   中英

添加项目时,不会返回带有超时的Python queue.get(block = true)

[英]Python queue.get(block=true) with timeout does not return when item is added

我的python应用程序中有2个线程。 线程A(好吧,基本上是'主'线程)是将项添加到队列中。 线程B从队列中获取它。

代码A:

def addTrade(self, date, volume, price, exchange):
    '''
    Adds a single trade to the database
    '''
    print "> ADD"
    try:
        self._incomingDataQueue._put(TradeData(exchange=exchange, date=date, volume=volume, price=price))
        # self._dataAvailableEvent.set()
        # self._dataAvailableEvent.clear()
        print "< ADD"
    except Exception as ex:
        print "ex: %s" % ex

线程B有这个:

print "> GET"
t = int(time.time())
tradeData = self._incomingDataQueue.get(block=True, timeout=20)
print "< GET %d " % (int(time.time()) - t)

所以......

会发生什么:线程B启动并等待队列中的项目(超时= 20秒)。 B开始后几乎瞬间,一个项目被添加到队列中。 在另一个项目后15秒。

然而:在20秒之后,队列上的获取只会重新调整。 当新数据可用时,我希望它能够“几乎立即”返回。

输出:

> GET
> ADD
< ADD
> ADD
< ADD
< GET 20

那么,这是队列的正常行为吗? 或者我应该使用其他机制?

提前致谢 !

问题是您正在调用Queue._put而不是Queue.put 我没有理由为什么要这样做。

前导下划线表示_put方法不是类Queue的公共接口的一部分,因此您不应该直接调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM