Django 中使用APScheduler

文章目录

    • 介绍
    • 安装APScheduler
    • django-apschedule的使用
        • 配置
        • views.py 中使用
        • django UWSGI APScheduler定时任务无效

介绍

这个围绕APScheduler的小包装程序使您可以使用Django的ORM将持久性作业存储在数据库中,而无需使用SQLAlchemy或其他过时的软件。

  • 同时在python2.*和python3 +上工作
  • 通过Django管理界面管理作业
  • 监视作业执行状态:持续时间,异常,回溯,输入参数。

安装APScheduler

pip install django-apscheduler

django-apschedule的使用

配置

  1. 在Django项目中的settings.py添加字段;
INSTALLED_APPS = (
  ...
  "django_apscheduler",
)
APSCHEDULER_DATETIME_FORMAT =  "N j, Y, f:s a"  # Default
  1. 执行迁移命令:
python manage.py migrate

views.py 中使用

import time

from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job

scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")

@register_job(scheduler, "interval", seconds=1)
def test_job():
    time.sleep(4)
    print("I'm a test job!")
    # raise ValueError("Olala!")

register_events(scheduler)

scheduler.start()
print("Scheduler started!")

django UWSGI APScheduler定时任务无效

  • django项目使用APScheduler来处理定时一个定时任务:在某个固定的时间更新数据库。

  • 开发阶段测试都没有问题,生产环境使用django+nginx+uwsgi来部署应用,这时候发现APScheduler定时任务根本不起作用,查了一下资料发现原来是uwsgi配置enable-threads参数的问题。

  • 该参数的含义是:是否允许用内嵌的语言启动线程。

  • 在uwsgi文件中配置该参数即可:

enable-threads = true

  • 这将允许你在app程序中产生一个子线程

你可能感兴趣的:(django)