Код: Выделить всё
import asyncio
async def get_some_values_from_io():
print("Getsome value Executing...")
await asyncio.sleep(3)
return [100,200]
vals = []
async def fetcher():
while True:
print("Fetcher Executing...")
io_vals = await get_some_values_from_io()
for val in io_vals:
vals.append(io_vals)
async def monitor():
while True:
print("Monitor Executing...")
print (len(vals))
await asyncio.sleep(3)
async def main():
t1 = asyncio.create_task(fetcher())
t2 = asyncio.create_task(monitor())
await asyncio.gather(t1, t2)
asyncio.run(main())
print("Rest of the method is executing....")
Пока обе они спят, последний оператор печати print("Rest метода выполняется...." должен быть запущен.
Но то, что печатается, это: (на самом деле оно просто продолжает работать)
Код: Выделить всё
Fetcher Executing...
Getsome value Executing...
Monitor Executing...
0
Fetcher Executing...
Getsome value Executing...
Monitor Executing...
2
...
Кроме того, есть упоминания о методе run_in_executor(), который говорит, что задачи, связанные с ЦП, можно запускать с использованием этого метода вне цикла событий. То есть это означает, что помимо цикла событий параллельно работает еще один поток? Это противоречит факту GIL.
Подробнее здесь: https://stackoverflow.com/questions/783 ... event-loop