在django框架中用uwsgi跑定时任务

怎么在用Django框架的Python程序中跑定时任务呢?用系统里面的crontab来跑的话任务成功或失败以及任务返回的结果都无法发送给程序,造成定时任务与程序的割裂,不方便进行控制。

想要实现定时任务,必须要有一个daemon进程一直在后台运行,如果Python程序是用uwsgi启动的,使用uwsgi就可以实现

uwsgi实现定时任务的Python接口详细请参考官方文档

把下面的代码加入uwsgi的入口程序中,通常可以写到Django程序的wsgi.py里面:

import uwsgi from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") application = get_wsgi_application() # 将具体的cron job分到另一个文件中写,便于维护 import TimerTasks as tt for job_id, job in enumerate(tt.jobs): uwsgi.register_signal(job_id, "", job['name']) if len(job['time']) == 1: uwsgi.add_timer(job_id, job['time'][0]) else: uwsgi.add_cron(job_id, job['time'][0], job['time'][1], job['time'][2], job['time'][3], job['time'][4])

以下是TimerTasks .py,增加、删除定时任务只需要修改这个Python脚本:

import time def cron_print_time(signum): ISOTIMEFORMAT='%Y-%m-%d %X' print time.strftime(ISOTIMEFORMAT, time.localtime()) def cron_print_hello(signum): print "hello" jobs = [ { "name" : cron_print_time, "time": [0, 17, -1, -1, 1], #minute, hour, day, month, weekday, "-1" means "all",此例为每个周一的17:00 }, { "name" : cron_print_hello, "time": [2], #每隔2秒 }, ]

__EOF__

本文作者李厚奇
本文链接https://www.cnblogs.com/lihouqi/p/14312719.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   李厚奇  阅读(933)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示