比如有个任务每天12点运行,今天的我就想现在立刻运行,而明天的还是12点运行?
按照之前添加定时任务的方式:
都是先将定时任务添加到任务中去,到达指定时间,再执行。 但是我现在页面上要立即执行:
就要触发一个立即执行的函数,要想立即执行,也很简单,有三种解决办法:
第一种, 独立出业务代码,直接执行业务逻辑,直接在接口调用这个立即执行函数
第二种, 增加一个调度, 什么参数都不加, 启动就执行, 不影响之前的业务
def run_tang_sign_article(user_name, cookie, user_agent):
print(f"添加自动评论任务: {user_name}")
arguments = (user_name, cookie, user_agent)
scheduler.add_job(auto_sign_tang, args=arguments)
return True
第三种, 以上两种都需要重启服务, 如果想不重启服务那就要实现一个动态添加调度的入口, 这样你想立即执行的时候
from datetime import datetime
from pytz import utc
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ProcessPoolExecutor
from apscheduler.executors.base import run_job as aps_run_job
scheduler = None
def init_scheduler():
global scheduler
scheduler = BackgroundScheduler(executors={'processpool': ProcessPoolExecutor(10)})
# scheduler.add_listener(record_error, (EVENT_JOB_ERROR))
# scheduler.add_listener(record_success, (EVENT_JOB_EXECUTED))
scheduler.start()
def get_job_by_id(job_id):
global scheduler
job = scheduler.get_job(job_id)
return job
def run_job(job_id):
job_exist = get_job_by_id(job_id)
if job_exist:
# 找到job就要运行
events = aps_run_job(job_exist, 'default', [datetime.now(utc)], __name__)
# 处理结果
global scheduler
for event in events:
scheduler._dispatch_event(event)
return ResultMaker(200, "success", [])
else:
return ResultMaker(404, "not found", [])
使用以上任一一种方式,就可以看到已经触发了自动签到的代码: