У меня есть скрипт python с запущенным циклом событий asyncio, я хочу знать, как перебирать большой список, не блокируя цикл событий. Таким образом, поддерживая цикл в рабочем состоянии.
Я пробовал создать собственный класс с __aiter__
и __anext__
, который не работал, я также пробовал создать async function
, который дает результат, но по-прежнему блокирует.
В настоящее время:
for index, item in enumerate(list_with_thousands_of_items):
# do something
Пользовательский класс, который я пробовал:
class Aiter:
def __init__(self, iterable):
self.iter_ = iter(iterable)
async def __aiter__(self):
return self
async def __anext__(self):
try:
object = next(self.iter_)
except StopIteration:
raise StopAsyncIteration
return object
Но это всегда приводит к
TypeError: 'async for' received an object from __aiter__ that does not implement __anext__: coroutine
Я сделал async function
, который работает, но все еще блокирует цикл событий:
async def async_enumerate(iterable, start:int=0):
for idx, i in enumerate(iterable, start):
yield idx, i
__aiter__
должен бытьdef
, а неasync def
. - person user4815162342   schedule 23.04.2019