Celery 之异步任务、定时任务、周期任务
生活随笔
收集整理的這篇文章主要介紹了
Celery 之异步任务、定时任务、周期任务
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是Celery?
Celery 是芹菜
Celery 是基于Python實現的模塊, 用于執行異步定時周期任務的
其結構的組成是由
??? 1.用戶任務 app
??? 2.管道 broker 用于存儲任務 官方推薦 redis rabbitMQ? / backend 用于存儲任務執行結果的
??? 3.員工 worker
?
一 異步任務
1 from celery import Celery 2 import time 3 4 my_task = Celery('tasks', broker='redis://127.0.0.1:6379', backend='redis://127.0.0.1:6379') 5 6 7 @my_task.task 8 def func(x, y): 9 time.sleep(20) 10 return x + y s1 1 from s1 import func 2 3 ret = func.delay(2, 4) 4 5 sid = ret.id 6 print(ret.id) s2 1 from celery.result import AsyncResult 2 from asyn.s1 import my_task 3 4 async_task = AsyncResult(id="8789dd69-437a-47c2-a3a5-1cd5c3ba9c73", app=my_task) 5 6 if async_task.successful(): 7 result = async_task.get() 8 print(result) 9 10 else: 11 print('任務還未完成') s3ps: eventlet 是一個python的三方庫 需要使用 pip安裝 pip install eventlet
?celery worker -A s1 -l INFO -P eventlet ?# 創建worker 執行代碼
二、周期任務
創建兩個任務
task_one:
1 from s6 import celery_task 2 3 4 @celery_task.task 5 def my_func1_task_one(a,b): 6 return f"my_func1_task_one return{a}" View Codetask_two
1 from s6 import celery_task 2 3 4 @celery_task.task 5 def my_func1_task_two(a, b): 6 return f"my_func1_task_one return{a}" View Code設置執行周期時間
1 # 周期任務 2 3 from celery import Celery 4 from celery.schedules import crontab 5 6 celery_task = Celery("task", 7 broker="redis://127.0.0.1:6379", 8 backend="redis://127.0.0.1:6379", 9 include=["task_one","task_two"]) 10 11 #我要要對beat任務生產做一個配置,這個配置的意思就是每10秒執行一次Celery_task.task_one任務參數是(10,10) 12 celery_task.conf.beat_schedule ={ 13 "each10s_task": { 14 "task":"task_one.my_func1_task_one", 15 "schedule": 10, # 每10秒鐘執行一次 16 "args": (10, 20) 17 }, 18 "each5s_task": { 19 "task": "task_two.my_func1_task_two", 20 "schedule": 5, # 每5秒 21 "args": (50, 60) 22 }, 23 # "each24hours_task": { 24 # "task": "Celery_task.task_one.one", 25 # "schedule": crontab(hour=24), # 每24小時執行一次 26 # "args": (10, 10) 27 # } 28 29 } 30 31 #以上配置完成之后,還有一點非常重要 32 # 不能直接創建Worker了,因為我們要執行周期任務,所以首先要先有一個任務的生產方 33 # celery beat -A Celery_task 34 # celery worker -A Celery_task -l INFO -P eventlet View Code執行指令:
1、創建Worker的方式并沒有發行變化,但是這里要注意的是,每間隔一定時間后需要生產出來任務給Worker去執行,這里需要一個生產者beat
celery beat -A Celery_task? #創建生產者 beat 你的 schedule 寫在哪里,就要從哪里啟動
2、celery worker -A Celery_task -l INFO -P eventlet
友情鏈接
?
轉載于:https://www.cnblogs.com/liaopeng123/p/10395855.html
總結
以上是生活随笔為你收集整理的Celery 之异步任务、定时任务、周期任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: InstallShield 常用常量
- 下一篇: 【HNOI2013】消毒