zoukankan      html  css  js  c++  java
  • django apscheduler在特定时间执行一次任务(run at a specify time only once)

     

      如何使程序在特定时间只执行一次,我查了一下。

           celery可以,时间以秒计。

    task = mytask.apply_async(args=[10, 20], countdown=60)
    

      不过,我们存在以天、星期、甚至月的倒计时,感觉celery还是不满足需求。

      最后找到了apscheduler。

    from django.utils import timezone
    from apscheduler.schedulers.blocking import BlockingScheduler
    from apscheduler.schedulers.background import BackgroundScheduler
    #from apscheduler.jobstores.mongodb import MongoDBJobStore
    from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
    from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
    
    jobstores = {
        'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
    }
    executors = {
        'default': ThreadPoolExecutor(20),
        'processpool': ProcessPoolExecutor(5)
    }
    job_defaults = {
        'coalesce': False,
        'max_instances': 3
    }
    
    #异步式的 scheduler = BackgroundScheduler( jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=timezone.get_current_timezone())

    #阻塞的,适用于scheduler是独立服务的场景。 #scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=timezone.get_current_timezone()) #scheduler = BlockingScheduler(executors=executors, job_defaults=job_defaults, timezone=timezone.get_current_timezone()) def myjob(): pass try: scheduler.start() # 5s后执行myjob # 传入时间去除毫秒 deadline = datetime.datetime.now().replace(microsecond=0) + datetime.timedelta(seconds=5) scheduler.add_job(myjob, 'date', run_date=deadline) except (KeyboardInterrupt, SystemExit): scheduler.shutdown()

      

  • 相关阅读:
    项目
    关于我
    【转载】罗胖精选|什么样的自控方法才有效?
    知识管理——得到CEO脱不花女士的一次分享
    注意由双大括号匿名类引起的serialVersionUID编译告警
    持续集成、持续交付和持续部署
    Google Cayley图数据库使用方法
    任务的属性
    团队博客地址
    个人总结
  • 原文地址:https://www.cnblogs.com/zhengze/p/10715576.html
Copyright © 2011-2022 走看看