这是我的代码
我使用调度程序的remove_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()
答案 0 :(得分:8)
只需要让调度程序使用job_function
删除remove_function
内的作业@Akshay Pratap Singh正确指出,控件永远不会返回start()
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()
答案 1 :(得分:5)
在使用BlockingScheduler时,首先要了解它的性质。
所以,基本上BlockingScheduler
是一个在前台运行的调度程序(即 start()将阻止该程序)。在非专业术语中,它在前台运行,所以当你调用时 start(),呼叫永远不会返回。这就是为什么从未调用 start()后面的所有行的原因,因为您的调度程序从未停止过。
如果要将APScheduler用作独立的调度程序(例如,构建守护程序),则BlockingScheduler非常有用。
<强>解决方案强>
如果要在运行某些代码后停止调度程序,则应选择ApScheduler
docs中列出的其他类型的调度程序。
我建议BackgroundScheduler
,如果您希望调度程序在您的应用程序/程序中的后台运行,您可以暂停,恢复和在您需要时随时删除。
答案 2 :(得分:0)
需要从另一个线程停止调度程序。调用scheduler.start()
的线程被调度程序阻止。您在scheduler.start()
之后编写的行是无法访问的代码。