Я хотел бы иметь пул процессов в основном асинхронном приложении ввода-вывода, потому что иногда необходимо выполнять задачи, связанные с ЦП, которые не должны останавливать основное приложение.Кроме того, я хочу ограничить количество процессов.
Согласно документации, правильный способ - использовать run_in_executor
.Приведенный ниже код работает, но он не завершает процессы после выполнения работы.
import asyncio
from concurrent.futures.process import ProcessPoolExecutor
class App:
def __init__(self):
self.process_pool = ProcessPoolExecutor(4)
self.loop = asyncio.get_event_loop()
async def get_regular(self):
return await regular()
async def get_expensive(self):
return await self.loop.run_in_executor(
self.process_pool, expensive
)
Как повторно использовать процессы в пуле процессов или завершать их, чтобы соблюдать верхний предел?