介绍
这个围绕APScheduler的小包装程序使您可以使用Django的ORM将持久性作业存储在数据库中,而无需使用SQLAlchemy或其他过时的软件。
- 同时在python2.*和python3 +上工作
- 通过Django管理界面管理作业
- 监视作业执行状态:持续时间,异常,回溯,输入参数。
安装APScheduler
pip install django-apscheduler
django-apschedule的使用
配置
- 在Django项目中的settings.py添加字段;
INSTALLED_APPS = (
...
"django_apscheduler",
)
APSCHEDULER_DATETIME_FORMAT = "N j, Y, f:s a" # Default
- 执行迁移命令:
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程序中产生一个子线程