python 的定时任务框架apscheduler如何停止任务?

题目描述

有一段代码是这样的:

from datetime import datetime
import os
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.schedulers.background import BackgroundScheduler

def tick():
    print('Tick! The time is: %s' % datetime.now())

if __name__ == '__main__':
    scheduler = BackgroundScheduler()
    scheduler.add_job(tick, 'interval', seconds=10)
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C    '))

    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass

这段代码运行以后会自动的在后台一直运行下去 就是每10秒打印一下函数

那么我要怎么停止这个代码 或是如何动态来管理代码?

查了好久,基本你看到的答案都是这样的:

job = scheduler.add_job(myfunc, 'interval', minutes=2)  
job.remove()  
Same, using an explicit job ID:  
  
scheduler.add_job(myfunc, 'interval', minutes=2, id='my_job_id')  
scheduler.remove_job('my_job_id') 

这个就是脚本运行的时候,加了一个任务 然后再把她移除掉????
那么我脚本运行了以后,如何找到这个任务去移除掉?

请高手指点一下

问题补充

就是脚本运行了,此刻你把终端关了,去睡觉了…然后第二天再次打开终端,你怎么停止这个任务?或是找到这个任务?如何对这个任务进行操作?

阅读 14.8k
2 个回答

在apscheduler中scheduler对象有个get_jobs方法,可以获得所有任务的信息,是1个列表嵌套字典的形式,字典里面有个ID的值就是任务的ID,你根据任务的名称找到对应的ID,然后将它传递给remove_job方法即可。

>>> scheduler.get_jobs()
[{...},{...}]
新手上路,请多包涵

最后一个任务调度完成时加一行代码就行了:scheduler.shutdown(wait=False)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题