crontab 每分钟一次_Celery实现定时任务crontab
? ? ? 定時任務的應用場景非常廣,基本上所有的開發人員都會接觸到定時任務,實現定時任務有很多方法,其中Celery里面的定時任務功能就非常強大,并且使用非常簡單,只需要安裝celery就行,下面就詳細介紹celery實現定時任務的步驟.
# 安裝celerypip install celery一. 搭建celery定時任務架構? ? ? ?在項目中適合的位置新建一個定時任務目錄celery_crontab,在目錄下創建config.py,?main.py, tasks.py三個文件,分別用于編寫配置代碼,定時任務實現代碼,任務函數代碼
# 目錄結構- celery_crontab - config.py - main.py - tasks.py二. 編寫代碼實現定時任務
1.在config.py中編寫配置代碼
from celery import Celery# broker,rabbitmqapp = Celery('celery_crontab', broker='amqp://guest@localhost//')# app = Celery('demo', broker='redis://127.0.0.1:6379/15')2.在tasks.py中編寫任務函數代碼
from config import app@app.taskdef crontab_func1(): print('在此編寫任務要實現的代碼') @app.taskdef crontab_func2(): print('在此調用實現了定時任務功能的函數或方法')3.在main.py中調用任務,并實現定時任務功能
from celery.schedules import crontabfrom tasks import *# 設置定時任務app.conf.beat_schedule = { # 設置定時任務的參數,key可以自定義,見名知義, # value為定時任務的相關參數的字典 'contab_func1-every-1-minute': { # 指定要執行的任務函數 'task': 'tasks.crontab_func1', # 設置定時啟動的頻率,沒分鐘執行一次任務函數 'schedule': crontab(minute='*/1'), # 傳入任務函數的參數,可以是一個列表或元組, # 如果函數沒參數則為空列表或空元組 'args': [] }, 'contab_func2-every-day': { 'task': 'tasks.crontab_func2', # 每周一至周五早上8點執行任務函數 'schedule': crontab(minute=0, hour=8, ???????????????? day_of_week=[1,?2,?3,?4,?5]), 'args': [] },}# 實現定時任務的另一種方式@app.on_after_configure.connectdef setup_periodic_tasks(sender, **kwargs): # sender.add_periodic_task(間隔時間秒, # 任務名.s(參數), name='自定義任務名') sender.add_periodic_task(10.0, crontab_func1.s(), name='crontab_func1 every 10') sender.add_periodic_task( # 每分鐘執行一次 crontab(minute='*/1'), # .s()內傳入任務函數需要的參數 crontab_func2.s() )? ? ? ?在celery文檔中例舉了更多任務頻率的設置方式,可以直接閱讀文檔Celery documentation:??
http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html
? ? ? ?也可以按住Ctrl左鍵點擊代碼中的crontab,進入源碼看__doc__(文檔注釋)內容,里面也例舉了很多任務頻率的設置方法
三. 啟動定時任務? ? ? ?啟動定時任務應在main.py的位置,所以最好到main.py所在目錄下執行命令,在其他位置啟動時要指定main的路徑
'''使用multi方式啟動定時任務,celery會自動生成任務子節點和自動創建子進程work為執行任務的進程名字-A main 指定定時任務的啟動函數main-l info 指定日志等級為info-B 將celery定時任務設置為后臺守護進程,不占用終端--logfile=celerylog.log 指定日志保存的文件名.也可指定路徑加文件名'''celery multi start work -A main -l info -B --logfile=celerylog.log# 停止定時任務時,將start換成stopcelery multi stop work -A main -l info -B --logfile=celerylog.log# 重啟定時任務,將start換成restartcelery multi restart work -A main -l info -B --logfile=celerylog.log? ? ? ?Celery的使用場景中,不管是實現異步任務,還是實現定時任務,基本都會依賴命令來啟動和停止任務,所以Celery的命令是非常多的,了解更多celery的命令可以到文檔里查看.Celery documentation:?
http://docs.celeryproject.org/en/latest/reference/celery.bin.celery.html
? ? ? ?也可以在終端輸入 celery -h 查看幫助信息.Windows Bug:RuntimeError: This platform does not support detach.site-packages\celery\platforms.py中嘗試導入模塊 “resource”時失敗,這個模塊不支持Windows,所以定時任務應該部署在Linux系統上.
總結
以上是生活随笔為你收集整理的crontab 每分钟一次_Celery实现定时任务crontab的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绝对控股权是67还是51
- 下一篇: 荣耀 X40 GT 手机开启 Magic