python celery
celery 一般用于做异步 和定时任务
不过听网上说 celery 坑还是蛮多的,特别定时任务,我们一般用来做定时任务,还有数据导入导出。
celery 不支持 redis cluster 集群模式
uWSGI 自带了一个简单的 Spooler 可以处理大部分异步任务和周期运行的任务( 2min 以内可以)
异步可以用redis 定时任务 能用的 就很多了
celery 一般用于做异步 和定时任务
不过听网上说 celery 坑还是蛮多的,特别定时任务,我们一般用来做定时任务,还有数据导入导出。
celery 不支持 redis cluster 集群模式
uWSGI 自带了一个简单的 Spooler 可以处理大部分异步任务和周期运行的任务( 2min 以内可以)
异步可以用redis 定时任务 能用的 就很多了
延时
s1.py
#消费着 from celery import Celery import time #放东西的地方 #返回值 c=Celery("task",broker="redis://192.168.12.191:6379/2",backend="redis://192.168.12.191:6379/1") @c.task def myfun1(a,b): return f"myfun1{a}{b}"
celery worker -A s1 -l info -P eventlet #异步和延时执行方法
s2.py
from s1 import myfun1,c from celery.result import AsyncResult from datetime import timedelta #指定多长时间以后执行 # s=myfun1.apply_async((10,20),countdown=5) #第二种 知道就行 s=myfun1.apply_async((10,20),eta="utc") print(s.id) #还有延时 重试等党发
异步
s1.py
#消费着 from celery import Celery import time #放东西的地方 #返回值 c=Celery("task",broker="redis://192.168.12.191:6379/2",backend="redis://192.168.12.191:6379/1") @c.task def myfun1(a,b): # int("阿达") return f"myfun1{a}{b}" @c.task def myfun2(): return "myfun2" @c.task def myfun3(): return "myfun3"
s2.py
#生产者 from s1 import myfun1,myfun2,myfun3,c from celery.result import AsyncResult s=myfun1.delay(10,20)#生产 # print(s.id)#拿id # print(s.status)#等待返回PENDING r=AsyncResult(id=s.id,app=c) # print(r.successful())#False print(r.get())#拿到返回值 print(r.get(propagate=False))#只获取报错信息 print(r.traceback)#获取具体出错位置 # print(r.status)#SUCCESS # print(r.successful())#True
周期
s1.py
#消费着 from celery import Celery import time #放东西的地方 #返回值 c=Celery("task",broker="redis://192.168.12.191:6379/2",backend="redis://192.168.12.191:6379/1") @c.task def myfun1(a,b): # int("阿达") return f"myfun1{a}{b}" @c.task def myfun2(): return "myfun2" @c.task def myfun3(): return "myfun3"
s2.py
from s1 import c from celery.beat import crontab c.conf.beat_schedule = { # "name": { # "task": "s1.myfun1",#执行谁的 # "schedule": 3,#间隔时间 # "args": (10, 20)#传的参数 # },#第二种方式 "crontab": { "task": "s1.myfun1", "schedule": crontab(minute=53),#指定到多少秒执行 "args": (10, 20) } }
celery beat -A s2 -l info #定时任务的消费者 执行方法
不怕大牛比自己牛,就怕大牛比自己更努力