Вопрос объясняет, как работать с CPU-bound операциями в асинхронном коде.
Для CPU-bound задач используйте loop.run_in_executor() с ThreadPoolExecutor или ProcessPoolExecutor. Сам asyncio не подходит для тяжёлых вычислений.
1. Пример с ThreadPoolExecutor:
import asyncio
from concurrent.futures import ThreadPoolExecutor
def cpu_intensive():
# Долгие вычисления
return sum(i*i for i in range(10**6))
async def main():
loop = asyncio.get_running_loop()
result = await loop.run_in_executor(
None, # По умолчанию ThreadPoolExecutor
cpu_intensive
)
print(result)2. Вариант с ProcessPoolExecutor:
with ProcessPoolExecutor() as pool:
result = await loop.run_in_executor(
pool,
cpu_intensive
)Вывод:
Для CPU-bound кода выносите операции в отдельные потоки/процессы.