Python-即使在使用';删除作业';
这是我的密码 我正在使用调度程序的Python-即使在使用';删除作业';,python,apscheduler,Python,Apscheduler,这是我的密码 我正在使用调度程序的remove\u job和shutdown功能来停止作业,但它会继续执行 阻止作业进一步执行的正确方法是什么 from apscheduler.schedulers.background import BlockingScheduler def job_function(): print "job executing" scheduler = BlockingScheduler(standalone=True) scheduler.add_job(
remove\u job
和shutdown
功能来停止作业,但它会继续执行
阻止作业进一步执行的正确方法是什么
from apscheduler.schedulers.background import BlockingScheduler
def job_function():
print "job executing"
scheduler = BlockingScheduler(standalone=True)
scheduler.add_job(job_function, 'interval', seconds=1, id='my_job_id')
scheduler.start()
scheduler.remove_job('my_job_id')
scheduler.shutdown()
因为你在使用,所以首先你知道它的性质
因此,基本上BlockingScheduler
是一个在前台运行的调度器(即start()将阻止程序)。用外行的话说,它是在前台运行的,因此当调用start()时,调用永远不会返回。这就是为什么永远不会调用紧跟着start()的所有行,因此您的调度程序从未停止过
如果您想将ApsScheduler用作独立计划程序(例如,构建守护程序),BlockingScheduler可能非常有用
解决方案 如果要在运行某些代码后停止计划程序,则应选择
ApScheduler
中列出的其他类型的计划程序
我建议
BackgroundScheduler
,如果您希望计划程序在应用程序/程序的后台运行,您可以随时暂停、恢复和删除,当您需要时。只需使用@Akshay Pratap Singh正确指出的remove\u函数
请求调度程序删除job\u函数中的作业,控件永远不会返回start()
需要从另一个线程停止调度程序。调用scheduler.start()
的线程被调度程序阻止。您在scheduler.start()
之后编写的行是无法访问的代码。当以这种方式使用BackgroundScheduler时,代码根本不执行单个作业->我做错了什么?使用BackgroundScheduler,start()不会阻止主脚本结束,从而有效地停止应用程序。当然,您不想在启动调度程序后立即停止作业,那么这里的真实场景是什么?@AlexGrönholm我只想安排一个作业在每个间隔运行,即使主脚本结束。我希望最终在相关函数中停止作业。我认为另一个选项是将其放入try/catch,并查找特定的异常(如键盘中断)以停止调度程序。请澄清此帖子给其他人带来的附加值。
from apscheduler.schedulers.background import BlockingScheduler
count = 0
def job_function():
print "job executing"
global count, scheduler
# Execute the job till the count of 5
count = count + 1
if count == 5:
scheduler.remove_job('my_job_id')
scheduler = BlockingScheduler()
scheduler.add_job(job_function, 'interval', seconds=1, id='my_job_id')
scheduler.start()