apscheduler怎么让一个固定时间运行的任务,立刻运行解决办法

比如有个任务每天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", [])

使用以上任一一种方式,就可以看到已经触发了自动签到的代码:

猜你喜欢

转载自blog.csdn.net/weixin_44786530/article/details/130024426