什么是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. (1)STM32使用HAL库操作GPIO

    一  初始化GPIO 使用HAL库的优点在于不用手动添加初始化的代码了,CubeMX会根据软件设置自动生成. 自动生成的HAL库GPIO初始化代码: static void MX_GPIO_Init( ...

  2. Extjs中数据导出到Excel

    1.前端代码(URL+前端传入参数) window.location.href="studnetMaintainAction!exportExcel"               ...

  3. 了解Scala反射

    本篇文章主要让大家理解什么是Scala的反射, 以及反射的分类, 反射的一些术语概念和一些简单的反射例子. 什么是反射 我们知道, Scala是基于JVM的语言, Scala编译器会将Scala代码编 ...

  4. 网络协议 终章 - GTP 协议:复杂的移动网络

        前面都是讲电脑上网的情景,今天我们就来认识下使用最多的移动网络上网场景. 移动网络的发展历程     你一定知道手机上网有 2G.3G.4G 的说法,究竟这都是什么意思呢?有一个通俗的说法就是 ...

  5. H5单张、多张图片保存续篇

    前言 这篇是接上篇内容.还没看的可以看H5单张.多张图片上传这篇文章预热. 图片入库 本章我们就来看看如何让多种图片保存至数据库中.数据库:mysql   后端:.NET Core 我们回顾一下上篇我 ...

  6. Python:轻量级 ORM 框架 peewee 用法详解(二)——增删改查

    说明:peewee 中有很多方法是延时执行的,需要调用 execute() 方法使其执行.下文中不再特意说明这个问题,大家看代码. 本文中代码样例所使用的 Person 模型如下: class Per ...

  7. SQL优化指南

    慢查询日志 开启撒网模式 开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助. SHOW VARIABLES LIKE 's ...

  8. Android版数据结构与算法(五):LinkedHashMap核心源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 上一篇基于哈希表实现HashMap核心源码彻底分析 分析了HashMap的源码,主要分析了扩容机制,如果感兴趣的可以去看看,扩容机制那几行最难懂的 ...

  9. html基础复习

    1.标签选择器   div{}   2.类选择器   .one class="one"   3.id选择器(定义+调用)   #one{} id="one"   ...

  10. dart 如何优雅的避空

    前言 对于每一个程序员来说,空指针异常应该是基本都会遇到过的异常,而且这个异常出现的概率还比较大. 但是,空指针异常又是最容易解决的异常,因为只要加个非空判断就可以避免了. 本篇通过对比一般非空判断和 ...