美文网首页
django定时任务实现方案

django定时任务实现方案

作者: 你猜_19ca | 来源:发表于2019-01-24 14:59 被阅读0次

    方案一 django-crontab

    • 安装
      pip install django-crontab
    • 部署
      在django项目的settings里添加如下:
    INSTALLED_APPS = (
        'django_crontab',
        ...
    )
    
    • 创建定时任务
    def my_scheduled_job():
      pass
    
    • 配置定时任务
      在django项目的settings里添加如下:
    CRONJOBS = [
        ('*/5 * * * *', 'myapp.cron.my_scheduled_job')
    ]
    
    • 启动定时任务
      python manage.py crontab add

    • 显示定时任务
      python manage.py crontab show

    • 删除定时任务
      python manage.py crontab remove

    • 优缺点:
      运行和django无关,依赖的是linux的crontab定时服务,因此无法在windowns下运行。

    参考: https://pypi.org/project/django-crontab/

    方案二 schedule

    • 安装
      pip install schedule
    • 使用
    import schedule
    import time
    
    def job():
        print("I'm working...")
    
    schedule.every(10).minutes.do(job)
    schedule.every().hour.do(job)
    schedule.every().day.at("10:30").do(job)
    schedule.every(5).to(10).minutes.do(job)
    schedule.every().monday.do(job)
    schedule.every().wednesday.at("13:15").do(job)
    schedule.every().minute.at(":17").do(job)
    
    while True:
        schedule.run_pending()
        time.sleep(1)
    
    • 优缺点
      优点:简单, 不依赖django,python都可以用
      缺点: 在django环境需要另起线程

    参考: https://pypi.org/project/schedule/

    方案三 apscheduler (简单环境下,推荐使用)

    • 安装
      pip install apscheduler
    • 使用
    from apscheduler.schedulers.background import BackgroundScheduler
    scheduler = BackgroundScheduler()
    scheduler.add_job(test.job, 'interval', minutes=1)
    scheduler.start()
    
    • 优缺点
      和schedule类似, 是schedule的加强版, 帮用户已经封装了线程,使用比schedule方便

    参考: https://apscheduler.readthedocs.io/en/latest/index.html

    方案四 celery

    没有demo,自己查文档,在小项目不建议用,杀鸡用牛刀。

    相关文章

      网友评论

          本文标题:django定时任务实现方案

          本文链接:https://www.haomeiwen.com/subject/gcnyjqtx.html