2015-12-11 6 views
0

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

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

Вы создали более одного такого исполнителя случайно? Видеть код может помочь. – ShadowRanger

+0

Вам нужно привести более полный пример - один, который я мог бы запустить сам. Во-первых, уверены ли вы, что вы указали правильного исполнителя для запуска? –

ответ

0

Причина этого не работает, как ожидалось, потому что вы не уточняя, которые ИСПОЛНИТЕЛЬ вы хотите запустить работу в

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

for i in range(20): 
    scheduler.add_job(run_job, executor='processpool') 
+0

Большое вам спасибо за помощь! Возможно ли предотвратить добавление планировщиком планировщика по умолчанию? – celerimo

+0

Нет, не должно быть. Но вы можете определить свой собственный исполнитель как «default». –

+0

Не могли бы вы рассказать об этом немного? Очевидно, я что-то не понимаю о концепции apscheduler. – celerimo

 Смежные вопросы

  • Нет связанных вопросов^_^