Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-即使在使用';删除作业';_Python_Apscheduler - Fatal编程技术网

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