django定时任务实现方案

方案一 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定时任务实现方案)