在APScheduler中运行多个作业时出错,“ apscheduler.schedulers.SchedulerAlreadyRunningError:计划程序已在运行”

问题描述 投票:1回答:1

我正在尝试在APScheduler中运行多个作业,然后稍后将其删除。但是,运行下面的代码会给我这个错误,“ apscheduler.schedulers.SchedulerAlreadyRunningError:计划程序已在运行。”

from flask import Flask
from apscheduler.schedulers.background import BackgroundScheduler
import time


sched = BackgroundScheduler(daemon=True)
def settingJobs(number):
    global sched
    theId = "id"+number
    print("hello?")
    sched.add_job(deletingJobs, 'interval', args=[theId], seconds=5, id=theId)
    sched.start()

def deletingJobs(theId):
    print("Testing")
    sched.remove_job(theId)


app = Flask(__name__)
@app.route('/')
def index():
    for x in range(0,5):
        settingJobs(str(x))
        time.sleep(2)

    return "hello"

if __name__ == "__main__":
    app.run(debug=False, use_reloader=False)

我得到的输出如下所示

hello?
hello?
…
…
…
apscheduler.schedulers.SchedulerAlreadyRunningError: Scheduler is already running

[如果有人可以指导我解决此问题或如何运行多个作业并删除他们以后,那太好了。

谢谢。

python-3.x apscheduler
1个回答
0
投票

我也一直在为此苦苦挣扎,但事实证明,这确实很简单。

与APScheduler一起使用时,必须完成后定义调度程序对象:

sched = BackgroundScheduler(daemon=True)

并启动它以启动验证您的内部工作清单。因此,如果将作业添加到此作业列表,则将计划该作业,如果删除了该作业,则将不再计划该作业。因此,这就是用这种思想重构的代码:

from flask import Flask
from apscheduler.schedulers.background import BackgroundScheduler
import time


sched = BackgroundScheduler(daemon=True)
sched.start() # notice that the "start to watch" process happen here

def settingJobs(number):
    global sched
    theId = "id"+number
    print("hello?")
    sched.add_job(deletingJobs, 'interval', args=[theId], seconds=5, id=theId)

def deletingJobs(theId):
    print("Testing")
    sched.remove_job(theId)


app = Flask(__name__)
@app.route('/')
def index():
    for x in range(0,5):
        settingJobs(str(x))
        time.sleep(2)

    return "hello"

if __name__ == "__main__":
    app.run(debug=False, use_reloader=False)

Obs。:出现此错误是因为,您已经在第一次循环迭代中启动了该调度程序对象一次,因此在第二次迭代中,Python尝试重新启动“不间断”的调度程序。

© www.soinside.com 2019 - 2024. All rights reserved.