我的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
那么,这是队列的正常行为吗?或者我应该使用其他机制吗?
提前致谢!
答案 0 :(得分:2)
问题是您拨打的是Queue._put
而不是Queue.put
。我认为你没有理由这样做。
前导下划线表示_put
方法不属于类Queue
的公共接口的一部分,因此您不应直接调用它。