Python-Flask Apscheduler作业在调用remove_job后继续运行

问题描述

我运行带有多个子模块的Flask服务,并在通过请求调用它们时将它们添加为作业。

我的代码结构是这样的:

(FUNC作为发帖请求包含对另一台服务器的调用

from flask_apscheduler import APScheduler
from flask import Flask,jsonify,request,send_file,Response,abort
from apscheduler.events import EVENT_JOB_REMOVED

app = Flask(__name__)
scheduler = APScheduler()
scheduler.init_app(app)
scheduler.start()

scheduler.add_listener(my_listener,EVENT_JOB_REMOVED)

def my_listener(event):
  job_id = event.job_id
  if event.code is EVENT_JOB_REMOVED:
    print('Job: %s cancelled'%(job_id))
    job = scheduler.get_job(job_id)
    job.remove()
    print(scheduler.get_jobs())
    
@app.route('/call_service',methods=['POST'])
def call service()
  # after necessary controls
  app.apscheduler.add_job(func=FUNC,trigger='interval',days=1000,args=[ARGS],id=job_name,max_instances=2)



@app.route('/stop_job',methods=['POST'])
def stop_job():
  '''
  Stop a running job 
  '''
  #Todo put CANCELLED text to result folder
  if request.method == 'POST':
    job_id = request.args.get('job_id')
    print('jobid {} cancel requested'.format(job_id))

    scheduler.remove_job(job_id)

每当添加新的作业/请求时,我都会在监听器中控制正在运行的作业,如果当前没有正在运行的作业,则可以控制该作业;我可以更改运行时间并立即开始等待作业。

job.modify(next_run_time=datetime.datetime.Now())

当我想取消要开始新工作的工作时,就会出现我的问题。在事件侦听器中,我可以看到作业列表为空,但在subservices任务中正在运行。

我想知道有什么方法可以使这些作业停止,就像当我停止执行主服务代码时,所有正在运行的子服务在一段时间后也停止一样。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...