zoukankan      html  css  js  c++  java
  • 在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秒
              },    
    ]
    
  • 相关阅读:
    Codeforces Round #595 (Div. 3) A,B,C,D
    计算几何板子题【2019牛客国庆集训派对day7——三角形和矩形】【多边形相交的面积】
    [POJ]POJ1753(dfs)
    [POJ]POJ2965(dfs)
    洛谷 P1772 [ZJOI2006]物流运输 题解
    简单概率与期望
    洛谷 P3802 小魔女帕琪 题解
    用树状数组实现的平衡树
    【模板】扩展中国剩余定理(EXCRT)
    新博客开通通知
  • 原文地址:https://www.cnblogs.com/lihouqi/p/14312719.html
Copyright © 2011-2022 走看看