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 #定时任务的消费者 执行方法

 

转载于:https://www.cnblogs.com/zaizai1573/p/10927608.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值