Но вот в чем интерес: он дает только один раз, а затем все просто зависает. Никаких ошибок, ничего. Он просто останавливается.
Вот упрощенная версия моего кода:
Код: Выделить всё
import asyncio
async def fetch_data_chunk():
# Simulate some async operation to get a chunk of data
print("Fetching data...")
await asyncio.sleep(1) # Pretend this is a network call
data = [1, 2, 3] # Sample data
print("Data fetched.")
return data
async def data_generator():
print("Generator started.")
while True:
chunk = await fetch_data_chunk()
if not chunk:
print("No more chunks.")
break
print(f"Yielding chunk: {chunk}")
yield chunk
print("Yielded. Looping again...")
await asyncio.sleep(0.1) # Small pause to see if it helps, it doesn't
async def main():
print("Main starting.")
gen = data_generator()
try:
async for item in gen:
print(f"Received item from generator: {item}")
# Simulate processing the item
await asyncio.sleep(0.5)
except StopAsyncIteration:
print("Generator finished iteration.")
print("Main finished.")
if __name__ == "__main__":
asyncio.run(main())
Код: Выделить всё
Main starting.
Generator started.
Fetching data...
Data fetched.
Yielding chunk: [1, 2, 3]
Received item from generator: [1, 2, 3]
Yielded. Looping again...
Fetching data...
Data fetched.
Yielding chunk: [1, 2, 3]
Received item from generator: [1, 2, 3]
Yielded. Looping again...
... (and so on) ...
Код: Выделить всё
Main starting.
Generator started.
Fetching data...
Data fetched.
Yielding chunk: [1, 2, 3]
Received item from generator: [1, 2, 3]
Yielded. Looping again...
Я пробовал кучу вещей:
- Удаление await asyncio.sleep(0.1) в генераторе.
- Изменение while True на for _ in range(3) (то же самое поведение, просто останавливается после 1).
- Воздействие с основной функцией await asyncio.sleep.
Подробнее здесь: https://stackoverflow.com/questions/798 ... fter-await