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秒
              },    
    ]
    
  • 相关阅读:
    ASP.NET的内置对象 —— Response 对象
    dd命令测试硬盘IO
    Linux netstat命令详解
    tpcc-mysql安装、使用、结果解读
    【MySQL案例】error.log的Warning:If a crash happens thisconfiguration does not guarantee that the relay lo(转)
    mysql5.6主从
    无法远程访问Mysql
    pythonMD5加密
    python随机验证码函数
    log buffer space事件(转)
  • 原文地址:https://www.cnblogs.com/lihouqi/p/14312719.html
Copyright © 2011-2022 走看看