Установить максимальный параллелизм с asyncio.create_subprocess_exec - PullRequest
0 голосов
/ 11 мая 2018

Мне нужно запустить программу около 500 раз с разными входами.Я хотел бы использовать asyncio.create_subprocess_exec и хочу ограничить число одновременно работающих процессов, чтобы не засорять машину.Есть ли способ установить уровень параллелизма?Например, я бы ожидал что-то вроде AbstractEventLoop.set_max_tasks.

1 Ответ

0 голосов
/ 11 мая 2018

Как и , предложенный @AndrewSvetlov , вы можете использовать asyncio.Semaphore для обеспечения ограничения:

async def run_program(input):
    p = await asyncio.create_subprocess_exec(...)
    # ... communicate with the process ...
    p.terminate()
    return something_useful

async def run_throttled(input, sem):
    async with sem:
        result = await run_program(input)
    return result

LIMIT = 10

async def many_programs(inputs):
    sem = asyncio.Semaphore(LIMIT)
    results = await asyncio.gather(
        *[run_throttled(input, sem) for input in inputs])
    # ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...