![](/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.