簡體   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