什么是Celery

Celery的功能

Celery是基于python实现的第三方组件,可以实现定时任务、周期任务等。

Celery的组成

Celery的角色

- 任务,创建或发布任务。

- 使用redis/rabbitMQ进行任务记录(broker)和任务返回结果(backend)的缓存。

- worker,主动执行任务,主公返回结果。

简单实例

from celery import Celery
import time my_task = Celery(
"task",
broker = "redis://127.0.0.1:6379",
backend = "redis://127.0.0.1:6379",
)
@my_task
def func1(x,y):
time.sleep(15)
return x+y
from work import func1
from celery.result import AsyncResult
from work import my_task res = func1.delay(2,4) async_task = AsyncResult(
app = "my_task",
id = res.id,
)
if async_task.successiful():
result = async_task.get()
print(result)
else:
print("等待任务完成")

注意:如果是在windows平台使用celery需要下载eventlet

work的启动启动不是直接python work.py,而是先celery worker -A work -l INFO -P eventlet

Celery的项目目录规范

在celery中,项目中需要一个文件夹,文件夹的名字没有强制规范,但是其中必须要有一个配置worker的名叫celery的文件。

celey.py实例

from celery import Celery
celery_task = Celery(
"task",
broker = "redis://127.0.0.1:6379",
backend = "redis://127.0.0.1:6379",
include = ["Celery_task.task_one","Celery_task.task_two"]
) #Celery_task是我定义的文件夹名

celery.py的同级文件还有将要运行的脚本,与文件夹同级的还有一个调用文件,用来调用不同任务。

此时使用celery就通过Celery文件夹进行启动。

celery worker -A Celery_task -l INFO -p eventlet -c 2

celery 默认启动五个线程,-c参数就是设置线程数的

Celery的定时任务和周期任务

celery的定时任务

celery的定时任务是通过apply_async来实现的,apply_async接受两个参数,一个是任务需要的参数,另一个是任务的定时时间,这里的时间指的是utc时间。

utc_time = datatime.datatime.utcfromtimestamp(time.time())
add_time = datatime.timedelta(second=2) #定时的时间
utc_time+=add_time
res = task_one.apply_async(args=(1,2),eta = utc_time)

celery的周期任务

周期任务就是周期性的生产出任务交给worker去执行,增加celery.py文件的内容如下。

from celery.schedules import crontab
celery_task.conf.beat_schedule = {
"ten_task":{
"task":"Celery_task.task_one.one", #这是目录
"schedule":crontab(hour=24),
"args":(2,4),
}
}

当我们使用celery实现周期任务时,不能直接创建worker,需要先创建创建任务的beat工厂。

celery beat -A Celery_task

Celery工具的更多相关文章

  1. Flask第三方工具组件介绍

    flask-wtf组件flask-login组件flask-session组件flask-sqlalchemy组件flask-script组件flask-cache组件flask-assets组件fl ...

  2. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  3. celery 框架

    转自:http://www.cnblogs.com/forward-wang/p/5970806.html 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据 ...

  4. Celery 框架学习笔记

    在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是 ...

  5. Celery,Tornado,Supervisor构建和谐的分布式系统

    Celery 分布式的任务队列 与rabbitmq消息队列的区别与联系: rabbitmq 调度的是消息,而Celery调度的是任务. Celery调度任务时,需要传递参数信息,传输载体可以选择rab ...

  6. 使用Supervisor管理Celery进程。

    讲过一篇celery的,但是celery启动后并不是daemon的,在生产环境中这肯定是不可以的,那怎么办呢? 这就需要使用supervisor进行进程管理了,下面详细介绍. 一. superviso ...

  7. celery简单应用

    写作背景介绍 在celery简单入门中已经介绍了写作的背景,这篇文章主要是深入介绍celery的使用技巧.在实际的项目中我们需要明确前后台的分界线,因此我们的celery编写的时候就应该是分成前后台两 ...

  8. Linux进程管理工具——supervisor

    介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...

  9. celery 入门

    认识 这里有几个概念,task.worker.broker.顾名思义,task 就是老板交给你的各种任务,worker 就是你手下干活的人员. 那什么是 Broker 呢? 老板给你下发任务时,你需要 ...

随机推荐

  1. js的赋值问题:值传递还是引用传递?

    ECMAScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String.还有1种复杂数据类型--Object,Object本质上是由一 ...

  2. 我的Python之旅第四天

    一 名称空间.作用域.取值顺序 1 名称空间 当程序运行时,代码从上至下依次执行,它会将变量与值得关系存储在一个空间中,这个空间就叫做名称空间,也叫命名空间.全局名称空间. 当程序遇到函数时,他会将函 ...

  3. Keras框架简介

    Keras是基于Theano的一个深度学习框架,它的设计参考了Torch,用Python语言编写,是一个高度模块化的神经网络库,支持GPU和CPU.使用文档在这:http://keras.io/,中文 ...

  4. 【STM32H7教程】第13章 STM32H7启动过程详解

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第13章       STM32H7启动过程详解 本章教 ...

  5. 基于docker 如何部署surging分布式微服务引擎

    1.前言 转眼间surging 开源已经有1年了,经过1年的打磨,surging已从最初在window 部署的分布式微服务框架,到现在的可以在docker部署利用rancher 进行服务编排的分布式微 ...

  6. eShopOnContainers 知多少[9]:Ocelot gateways

    引言 客户端与微服务的通信问题永远是一个绕不开的问题,对于小型微服务应用,客户端与微服务可以使用直连的方式进行通信,但对于对于大型的微服务应用我们将不得不面对以下问题: 如何降低客户端到后台的请求数量 ...

  7. 如何查找元素对应事件的js代码,检测定位js事件

    比如一张图片当鼠标放到上面时,图片改变.想找到这个事件对应的js代码,假设另存为html之后,文件夹中有.js文件. 如果你会调试,可以用打开浏览器的调试功能,以chrome为例,按F12打开调试窗口 ...

  8. MySQL之父造访腾讯云 为腾讯云数据库开源点赞

    近日,技术大牛 MariaDB 公司创始人兼CTO Michael Widenius(又名Monty).MariaDB 基金会主席 Kaj 来到中国,针对MariaDB与腾讯云的技术合作进行回访.去年 ...

  9. sau交流学习社区--在element-ui中新建FormData对象组合上传图片和文件的文件对象,同时需要携带其他参数

    今天有一个坑,同时要上传图片和文件,而且图片要展示缩略图,文件要展示列表. 我的思路是: 首先,只上传附件照片,这个直接看ele的官方例子就行,不仅仅上传附件照片,还同时上传其他参数. 然后,再做上传 ...

  10. WebApi 之HelpPage帮助页

    1.创建解决方案 2.选择类型-Web API 3.设置项目生成XML路径 同时修改HelpPageConfig,代码调用XML文件位置 3.编写WebApi接口代码 4.启动项目 查看接口 5.测试 ...