flask_apscheduler一款定時任務器
阿新 • • 發佈:2020-11-18
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