celery异步,延时任务,周期任务(代码片段)

robertx robertx     2022-12-08     170

关键词:

  celery中文译为芹菜,是一个分布式任务队列. 是异步的,所以能处理大量消息

  最新的celery不支持windows下使用了,所以在使用pycharm安装celery模块之后,需要再安装eventlet模块才能测试运行.

一.异步任务

启动客户端:

s1,s2要在项目目录下,如果在文件夹中执行,terminal输入命令的时候要-A 项目文件夹的名字

c=Celery("task",broker="redis://127.0.0.1:6379/2",backend="redis://127.0.0.1:6379/1", include="项目名.文件夹")

 

Terminal中输入

celery worker -A s1 -l info -P eventlet

 

  给定两个文件

  s1.py

from celery import Celery
import time
c=Celery("task",broker="redis://127.0.0.1:6379/2",backend="redis://127.0.0.1:6379/1")

@c.task
def myfun1(a,b):
    return f"myfun1ab"

@c.task
def myfun2():
    return "myfun2"

@c.task
def myfun3():
    return "myfun3"

celery worker -A s1 -l info -P eventlet

  s2.py

from s1 import myfun1,myfun2,myfun3,c
from celery.result import AsyncResult
#多个生产者
# for i in range(10):
#     s=myfun1.delay()
#     print(s)

s=myfun1.delay(10,20)
print(s.id)
r=AsyncResult(id=s.id,app=c)

#获取状态
# print(r.status)
# print(r.successful())

#获取值
# print(r.get())

#只获取报错信息
print(r.get(propagate=False))

#获取具体出错的位置
# print(r.traceback)

 

二.延时任务/定时任务

  apply_async

t=add.apply_async((1,2),countdown=5) #表示延迟5秒钟执行任务
print(t)
print(t.get())

  支持的参数

countdown : 等待一段时间再执行.
add.apply_async((2,3), countdown=5)
eta : 定义任务的开始时间.这里的时间是UTC时间,这里有坑 add.apply_async((
2,3), eta=now+tiedelta(second=10))
expires : 设置超时时间. add.apply_async((
2,3), expires=60)
retry : 定时如果任务失败后, 是否重试. add.apply_async((
2,3), retry=False)
retry_policy : 重试策略.   max_retries : 最大重试次数, 默认为
3 次.   interval_start : 重试等待的时间间隔秒数, 默认为 0 , 表示直接重试不等待.   interval_step : 每次重试让重试间隔增加的秒数, 可以是数字或浮点数, 默认为 0.2   interval_max : 重试间隔最大的秒数, 即 通过 interval_step 增大到多少秒之后, 就不在增加了, 可以是数字或者浮点数, 默认为 0.2 .

  s1.py

from celery import Celery
import time
c=Celery("task",broker="redis://127.0.0.1:6379/2",backend="redis://127.0.0.1:6379/1")

@c.task
def myfun1(a,b):
    return f"myfun1ab"

@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
from datetime import timedelta

#指定多长时间以后执行
# s=myfun1.apply_async((10,20),countdown=5)

#第二种方式,使用utc时间
s=myfun1.apply_async((10,20),eta="utc时间")
print(s.id)
# 延时
# 重试

三.周期任务

  启动: 在Terminal中

celery beat -A s2 -l info

 

  s1.py

from celery import Celery
import time
c=Celery("task",broker="redis://127.0.0.1:6379/2",backend="redis://127.0.0.1:6379/1")

@c.task
def myfun1(a,b):
    return f"myfun1ab"

@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=44),
        "args": (10, 20)
    

 配置详解:

 from celery.schedules import crontab

 CELERYBEAT_SCHEDULE = 
     # Executes every Monday morning at 7:30 A.M
     add-every-monday-morning: 
         task: tasks.add,
         schedule: crontab(hour=7, minute=30, day_of_week=1),
         args: (16, 16),
    ,
 

 

celery(代码片段)

目录celery1celery简介2安装3celery的架构4celery的使用场景5celery的使用5.1基本结构+异步任务5.2包结构+延时任务5.3异步任务5.4延时任务5.5定时任务6django使用celerycelerycelery是一个异步任务框架,用于执行异步任务,执行延迟任务,执行... 查看详情

celery-一个懂得异步任务,定时任务,周期任务的芹菜(代码片段)

1.什么是Celery?Celery是芹菜Celery是基于Python实现的模块,用于执行异步定时周期任务的其结构的组成是由   1.用户任务app   2.管道broker用于存储任务官方推荐redisrabbitMQ /backend用于存储任务执行结果的 &nbs... 查看详情

celery-一个懂得异步任务,定时任务,周期任务的芹菜(代码片段)

1.什么是Celery?Celery是芹菜Celery是基于Python实现的模块,用于执行异步定时周期任务的其结构的组成是由   1.用户任务app   2.管道broker用于存储任务官方推荐redisrabbitMQ /backend用于存储任务执行结果的 &nbs... 查看详情

celery(代码片段)

Celery1.Celery是什么Celery一个懂得异步任务,定时任务,周期任务的芹菜Celery是基于Python实现的模块,用于执行异步定时周期任务的其结构的组成是由   1.用户任务app   2.管道broker用于存储任务官方推荐redisrabbitMQ&n... 查看详情

django项目中使用celery做异步任务(代码片段)

异步任务介绍在写项目过程中经常会遇到一些耗时的任务,比如:发送邮件、发送短信等等~。这些操作如果都同步执行耗时长对用户体验不友好,在这种情况下就可以把任务放在后台异步执行celery就是用于处理异步任务的框架,celery... 查看详情

celery异步任务框架(代码片段)

目录Celery架构消息中间件任务执行单元任务结果存储Celery的安装配置Celery执行异步任务使用步骤立即任务和延时任务定时任务使用场景django项目中使用celery.py(celery服务)tasks.py(任务)坑点:Celery官网:http://www.celeryproject.org/Ce... 查看详情

celery时区设置问题源码探究

参考技术A项目中有使用到Celery框架,主要使用Celery来在使用Django搭建的项目中创建延时任务及周期任务。在使用过程中出现过延时任务及周期任务到预定时间未能执行的情况。Google、百度了一些网友的分析及解决方案,大多认... 查看详情

celery收下这捆芹菜!(代码片段)

目录Celery简介Celery构成TaskBrokerWorkerBackendCelery使用安装基本使用异步任务:delay延迟任务:apply_async周期任务:beat_schedulesDjango配置Celerycelery.pytask.pyCelery简介Celery是一个强大的分布式任务队列的异步处理框架,它可以让任务的执行完全... 查看详情

celery的使用(代码片段)

一、celery介绍1.什么是celeryCelery是一个简单、灵活且可靠的,处理大量消息的分布式系统专注于实时处理的异步任务队列同时也支持任务调度celery单独使用一个socket,不会额外占用其他程序的资源。项目中使用celery的优势减少服... 查看详情

celery介绍(代码片段)

目录官方架构:  celery是独立的服务celery包结构 celery执行异步任务,延时任务,定时任务异步任务 延时任务 定时任务 django使用celery秒杀逻辑双写一致性官方Celery官网:Celery-DistributedTaskQueue—Celery5.2.7documentati... 查看详情

celery:celery介绍架构基本使用,celery执行异步任务延迟任务定时任务,django中使用celery。(代码片段)

一、celery介绍Celery官网:Celery-DistributedTaskQueue—Celery5.2.7documentationCelery官方文档英文版:Celery-DistributedTaskQueue—Celery5.2.7documentation#celery:芹菜,一个分布式的异步任务框架。⭐celery能干什么:异步任务,延迟任... 查看详情

1.10celery(代码片段)

Celery架构Celery的架构由三部分组成,消息中间件(messagebroker)、任务执行单元(worker)和任务执行结果存储(taskresultstore)组成。消息中间件Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,Ra... 查看详情

django中使用celery来异步处理和定时任务(代码片段)

DjangoWeb项目中我们经常需要执行耗时的任务比如发送邮件、调用第三方接口、批量处理文件等等,将这些任务异步化放在后台运行可以有效缩短请求响应时间。另外服务器上经常会有定时任务的需求,比如清除缓存、备... 查看详情

django实现异步定时任务(代码片段)

Celery(芹菜)   这个翻译之后居然叫芹菜~~~~好吧~~挺补的~~~最近Django框架需要涉及到执行定时周期任务~~之前想用线程方法的~发现好像不会尴尬~~~然后又想用“django_crontab”来执行的毕竟这个学习周期短~~但是不好用... 查看详情

关于celery的应用(代码片段)

  一、首先:以下代码都是在LINUX上执行的,因为新版本celery已经不支持windows系统,运行会报错。  Celery是处理大量消息的一个分布式系统,那他是如何运行的呢?      可以看到,Celery主要包含以下几个模块:... 查看详情

首页轮播图的异步更新(代码片段)

基于分布式异步框架celery前文已知,celery可以执行异步任务、延时任务、定时任务。broker:‘redis://127.0.0.1:6379/2‘#消息队列(中间件)broker可以使用Redis、RabbitMQbackend:‘redis://127.0.0.1:6379/3‘#任务结果仓库celery_task的目录结构#在项... 查看详情

celery-周期性任务(代码片段)

Introductioncelerybeatisascheduler;Itkicksofftasksatregularintervals,thatarethenexecutedbyavailableworkernodesinthecluster.Bydefaulttheentriesaretakenfromthebeat_schedulesetting,butcustomstorescanalso 查看详情

celery(补充)(代码片段)

1.什么是Celery?Celery是芹菜Celery是基于Python实现的模块,用于执行异步定时周期任务的其结构的组成是由   1.用户任务app   2.管道broker用于存储任务官方推荐redisrabbitMQ /backend用于存储任务执行结果的 &nbs... 查看详情