Python 为什么ProcessPoolExecutor忽略max_workers参数?

Python 为什么ProcessPoolExecutor忽略max_workers参数?,python,apscheduler,Python,Apscheduler,我希望max\u workers参数设置为1的apscheduler.executors.pool.ProcessPoolExecutor不会并行执行多个作业 import subprocess from apscheduler.executors.pool import ProcessPoolExecutor from apscheduler.schedulers.blocking import BlockingScheduler def run_job(): subproces

我希望
max\u workers
参数设置为1的
apscheduler.executors.pool.ProcessPoolExecutor
不会并行执行多个作业

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()                                
然而,实际上多达十个作业是并行执行的

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()                                

我是否误解了这一概念,或者这是一个bug?

这不能按预期工作的原因是您没有指定要在哪个执行器中运行作业

请尝试以下方法:

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

你有没有碰巧创造了不止一个这样的遗嘱执行人?查看代码可能会有所帮助。您需要给出一个更完整的示例——一个我可以自己运行的示例。首先,你确定你指定了正确的执行者来运行吗?非常感谢你的帮助!是否可以阻止计划程序添加默认执行器?不,也不应该。但是你可以把你自己的遗嘱执行人定义为“违约”。你愿意详细说明一下吗?显然,我误解了apscheduler的概念。您将执行器命名为“processpool”,但如果将其命名为“default”,则默认情况下将使用它,而无需在add_job()中明确指定名称。