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

时间:2014-01-18 23:12:36

标签: python multithreading queue

我的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

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

提前致谢!

1 个答案:

答案 0 :(得分:2)

问题是您拨打的是Queue._put而不是Queue.put。我认为你没有理由这样做。

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