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秒
              },    
    ]
    
  • 相关阅读:
    阅读进度条的实现
    获取radio选中的值
    Vue的学习(六)
    Vue的学习(三)
    C#委托详解
    C#泛型和非泛型
    C#装箱和拆箱
    C#内存泄漏的事例
    C#windows服务开发(一)
    C#windows服务开发
  • 原文地址:https://www.cnblogs.com/lihouqi/p/14312719.html
Copyright © 2011-2022 走看看