我目前正在开发一个python机器人,其中我有一些带有迭代器方法的类的代码。迭代器冻结
buffer = []
def __iter__(self):
return self
def __next__(self):
incoming = str(self.irc.recv(1024), encoding='utf-8').split("\r\n")
self.buffer += incoming
last = self.buffer.pop(0) #This implements a FI-FO queue
#perform operations to extract commands etc.
return [message,command,trail]
我打电话的这个类中的迭代器基本上是这样的:
for command in connection: #Connection is the name of the above class
print(command)
什么,我观察到的是,队列的第3个元素是通过迭代,然后剩下的只是留在那里,在队列中,直到一个新元素进入队列时才处理,此时队列中的第一个元素将离开(就像最后一个元素推出第一个元素一样)。 我不确定这是否与迭代器有关,并且我不应该使用它们来执行此任务(如果不是,那么应该使用什么),或者这是否是另一个问题。感谢您的帮助,Kunc。
'irc.recv'看起来像是可能导致线程阻塞的事情,请确保您没有等待数据。 – user2085282 2014-09-12 23:51:41
你真的想把'buffer'作为一个类属性,由这个类的所有实例共享吗?对于像这样的东西,这似乎是一个非常糟糕的主意...... – abarnert 2014-09-13 01:26:44
是的。我现在通过在recv函数中添加if语句来检查缓冲区是否为空,然后再添加它。 – Kunc 2014-09-13 01:33:42