• flask_apscheduler一款定时任务器


    flask_apscheduler一款定时任务器

    • 下载:

      pip install Flask-APScheduler
      
    • 通过定义工厂函数注册app

      # SCHEDULER_OPEN为配置是否开启定时
      if app.config.get("SCHEDULER_OPEN"):
      	scheduler_init(app)
      
    • 为了保证系统只启动一次定时任务:文件锁

      def scheduler_init(app):
          """
          保证系统只启动一次定时任务
          :param app:
          :return:
          """
          if platform.system() != 'Windows':
              fcntl = __import__("fcntl")
              f = open('scheduler.lock', 'wb')
              try:
                  fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
                  scheduler.init_app(app)
                  scheduler.start()
                  app.logger.debug('Scheduler Started,---------------')
              except:
                  pass
      
              def unlock():
                  fcntl.flock(f, fcntl.LOCK_UN)
                  f.close()
              atexit.register(unlock)
          else:
              msvcrt = __import__('msvcrt')
              f = open('scheduler.lock', 'wb')
              # 上线更改........
              try:
                  msvcrt.locking(f.fileno(), msvcrt.LK_NBLCK, 1)
                  scheduler.init_app(app)
                  scheduler.start()
                  app.logger.debug('Scheduler Started,----------------')
              except Exception as e:
                  print(e)
                  print("发生错误2")
                  pass
      
              def _unlock_file():
                  try:
                      f.seek(0)
                      msvcrt.locking(f.fileno(), msvcrt.LK_UNLCK, 1)
                  except:
                      pass
      
              atexit.register(_unlock_file)
      
      

      需要注意是,windows在debug=True时启动会报错。有Permission denied问题。debug=False 不会报错。 一般我都是注释掉:msvcrt.locking(f.fileno(), msvcrt.LK_NBLCK, 1)即可。

    • JOBS相关配置:

      JOBS = [
      	{
              'id': 'calculate_to_db_uv',# 任务id
              'func': 'hrv_server.task.time_task.pv_uv:calculate_to_db_uv',# 执行任务对应函数
              'args': (1, 2),#传入参数
              'trigger': 'interval', #任务类型定时操作
              # 'hour': 0,
              # 'minute': 0,
              'seconds': 20# 每20秒执行一次
              },
          {
              'id': 'calculate_to_db_uv',
              'func': 'hrv_server.task.time_task.pv_uv:calculate_to_db_uv',
              'args': (1, 2),
              'trigger': 'cron',#触发器执行
              # 每天 23点40分执行
              'day_of_week': "0-6",
              'hour': 23,
              'minute': 40,
          },
      ]
      
    • 部署gunicorn

      # 并行工作进程数
      workers = 4
      # 指定每个工作者的线程数
      threads = 4
      # 监听内网端口80
      bind = '0.0.0.0:80'
      # 工作模式协程
      worker_class = 'eventlet' 
      # 设置最大并发量
      worker_connections = 2000
      # 设置进程文件目录
      pidfile = 'gunicorn.pid'
      # 设置访问日志和错误信息日志路径
      accesslog = './logs/gunicorn_acess.log'
      errorlog = './logs/gunicorn_error.log'
      # 设置日志记录水平
      loglevel = 'info'
      # 代码发生变化是否自动重启
      reload=True
      
      
  • 相关阅读:
    Java 流(Stream)、文件(File)和IO
    归并排序(Java)
    TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
    动态规划—矩阵链乘法
    SQL Server 行列转换
    dropdownlist无刷新传值
    ASP.NET在主题中添加CSS文件
    asp.net网站后台退出后,点后退按钮仍能进,如何安全退出
    下拉框数据绑定两种方式
    win7安装IIS及将网站发布到IIS上
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13998637.html
Copyright © 2020-2023  润新知