Почему ProcessPoolExecutor игнорирует аргумент max_workers?

Я ожидал, что apscheduler.executors.pool.ProcessPoolExecutor с max_workers аргумент, установленный в 1, не будет выполнять более одного задания параллельно.

import subprocess

from apscheduler.executors.pool import ProcessPoolExecutor
from apscheduler.schedulers.blocking import BlockingScheduler


def run_job():
    subprocess.check_call('echo start; sleep 3; echo done', shell=True)

scheduler = BlockingScheduler(
        executors={'processpool': ProcessPoolExecutor(max_workers=1)})

for i in range(20):
    scheduler.add_job(run_job)
scheduler.start()                                

Однако на самом деле до десяти работ выполняются параллельно.

Я неправильно понимаю концепцию или это ошибка?

1 ответ

Решение

Причина, по которой это не работает должным образом, заключается в том, что вы не указываете, в каком исполнителе вы хотите запустить задание.

Попробуйте это вместо этого:

for i in range(20):
    scheduler.add_job(run_job, executor='processpool')
Другие вопросы по тегам