В настоящее время я разрабатываю бот python, в котором у меня есть код с классом, который имеет методы итератора.Iterator freezing
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
Действительно ли вы хотите, чтобы 'buffer' был атрибутом класса, общим для всех экземпляров этого класса? Это похоже на очень плохую идею для чего-то подобного ... – abarnert
Да. Я исправил это теперь, добавив оператор if вокруг функции recv, проверяя, что буфер пуст, прежде чем добавлять к нему. – Kunc