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秒
              },    
    ]
    
  • 相关阅读:
    2015抢票记事
    Provide your license server administrator with the following information.error code =-42,147
    微信支付现金红包接口
    SQL Server 触发器
    SQL增删查改注意的事项
    SQL while循环
    SQL SERVER 中is null 和 is not null 将会导致索引失效吗?
    HTML中head里的内容经浏览器解析后全到body里了
    sqLSERVER 计划缓存
    通用分页存储过程
  • 原文地址:https://www.cnblogs.com/lihouqi/p/14312719.html
Copyright © 2011-2022 走看看