我目前正在開發一個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