Python Celery定時任務詳細講解
前言
Celery在python中的應用除瞭實現異步任務(async task)外也可以執行定時任務(beat)
一、Celery定時任務是什麼?
Celery默認任務單元由任務生產者觸發,但有時可能需要其自動觸發,而Beat進程正是負責此類任務,能夠自動觸發定時/周期性任務.
Celery 進行周期任務也很簡單,隻需要在配置中配置好周期任務,然後在運行一個周期任務觸發器(beat)即可,具體網上看
二、使用步驟
win10 + python3 + redis + celery 5
1.代碼結構
celery_config.py配置:
代碼如下(示例):
#-*-coding=utf-8-*- from datetime import timedelta from celery.schedules import crontab # 中間件 BROKER_URL = 'redis://scck2svr03:6379/6' # 結果存儲 # CELERY_RESULT_BACKEND = 'redis://:scck2svr03:6379/5' CELERYD_CONCURRENCY = 20 # 並發worker數 CELERYD_FORCE_EXECV = True # 非常重要,有些情況下可以防止死鎖 # CELERY_TASK_SERIALIZER = 'msgpack' # 任務序列化和反序列化使用msgpack方案 CELERY_RESULT_SERIALIZER = 'json' # 讀取任務結果一般性能要求不高,所以使用瞭可讀性更好的JSON CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # celery任務結果有效期 CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接受的內容類型 CELERY_TIMEZONE = 'Asia/Shanghai' # celery使用的時區 CELERY_ENABLE_UTC = True # 啟動時區設置 # 默認worker隊列 #CELERY_DEFAULT_QUEUE = 'default' # 異步任務 CELERY_IMPORTS = ( "celery_learning.email.tasks" ) # celery beat CELERYBEAT_SCHEDULE = { 'periodic_task-every-minute': { 'task': 'celery_learning.email.tasks.add', 'schedule': crontab(minute="*/1"), 'args': (1,2) }, 'periodic_task-every-10second':{ 'task':'celery_learning.email.tasks.add', 'schedule':timedelta(seconds=10), 'args':(1,12) } }
2.啟動定時任務
代碼如下(示例):
終端1:celery -A celery_learning.celery_app worker -l info -P gevent 終端2:celery -A celery_learning.celery_app beat
終端1
終端2
3.執行結果
兩個定時任務,一個每分鐘執行,一個每10秒執行
結果如下:
總結
到此這篇關於Python Celery定時任務詳細講解的文章就介紹到這瞭,更多相關Python Celery 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 關於Django使用 django-celery-beat動態添加定時任務的方法
- Django中celery的使用項目實例
- 使用 Celery Once 來防止 Celery 重復執行同一個任務
- Django使用celery異步發送短信驗證碼代碼示例
- Python中celery的使用