问题描述
我运行带有多个子模块的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 (将#修改为@)