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