2011-03-07 79 views
0

客户发现这个错误,我的软件使用Python 2.5.5。怎么会这样? _empty是否已从队列中消失?我根本不明白这一点。我没有从队列继承,只有Queue类的普通实例。在我的机器上似乎工作正常,但是,在客户的机器上出现错误。任何人都可以给我一些建议,问题可能是什么?AttributeError:队列实例没有属性'_empty'

问题曾经发生在这里:put_nowait,QSIZE,得到:

import Queue 

self.requests.mutex.acquire() 
allCount = self.requests._qsize() 
while not self.requests._empty(): 
    try: 
     (sock, addr, _) = self.requests._get() 
     # ... do some things 
self.requests.mutex.release() 

之前,队列与

self.requests = Queue(self.reqQLen) 

而且这些队列方法还采用了模块初始化。该队列用于多线程环境中。这可能是原因吗?

我想知道:错误消息告诉我变量请求被识别为一个队列实例,但属性_empty不存在。但是,这是Queue类中的常规方法。

+0

您和您的客户正在运行什么版本的Python? – nmichaels 2011-03-07 15:22:02

+0

两个版本2.5.5。 – robsch 2011-03-07 15:53:12

回答

5

我对此不是很熟悉(我不知道你使用的是什么版本的Python),但是看documentation我看不到_empty属性,但只有一个empty()方法。由于前导下划线用于表示私有属性,因此我认为它的存在可能不是标准化的,但依赖于实现,而使用empty()方法反而是正确的解决方案。

+0

使用版本2.5.5。我想,使用私人方法不应该是一个问题。 – robsch 2011-03-07 15:32:42

+5

@Robert:领导下划线*呼喊*“如果你使用它,它会改变/消失,这是你的错”。私人东西是私人的,因为外面的人都不应该知道(让它使用)它。 – delnan 2011-03-07 15:36:09

+0

所以我不得不期待某些东西在Queue实例中删除方法?或者可以说这个错误是一个证明某种东西已经消除了方法的直接证据吗?队列实现看起来很无辜... – robsch 2011-03-07 15:49:54

相关问题