Почему 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')