![](/img/trans.png)
[英]Python Multiprocessing queue.get() timeout when queue is not empty
[英]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.