Celery工具

什么是Celery

Celery的功能

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

Celery的组成

Celery的角色
- 任务,创建或发布任务。
- 使用redis/rabbitMQ进行任务记录(broker)和任务返回结果(backend)的缓存。
- worker,主动执行任务,主公返回结果。

简单实例

from celery import Celery
import timemy_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_taskres = 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

转载于:https://www.cnblogs.com/cuiyuanzhang/p/10396317.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ-3061 尺取

题意就是 在P张书页中 其中有重复元素 选取最小连续区间内包括了这期间的所有不同的数 求符合条件的最小区间长度 本题可以用尺取法所谓尺取 就是选取两个下标 s e 分别指向当前扫面区间的首尾开始赋值都是1 然后分析数串 把e向后移 找到一种符合条件的区间后再把s向后移不断判…

html:(26):类选择器和id选择器

类选择器 类选择器在css样式编码中是最常用到的,如右侧代码编辑器中的代码:可以实现为“胆小如鼠”、“勇气”字体设置为红色。 语法: .类选器名称{css样式代码;} 注意: 1、英文圆点开头 2、其中类选器名称可以任意起名(但不…

[剑指offer][JAVA]面试题第[10-2]题[青蛙跳台阶问题][动态规划][递归]

【问题描述】[中等] 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e97(1000000007),如计算初始结果为:1000000008,请返回 1。【解答思路…

SpringCloud(三)之Feign实现负载均衡的使用

一 点睛 Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。 在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解&…

Bound Found POJ - 2566 (尺取+前缀和)

题意 就是给一串序列 在给一个t 求一段区间的加和绝对值与t最小的值与区间左右端点是多少 思路 这道题一开始不知道如何去做 用尺取法求区间但是因为区间中存在负数没有单调性 没有特殊的特征 若对区间求一下前缀和 就使整个区间有了单调性 由于绝对值情况下 没有前后 所以…

[剑指offer][JAVA]面试题第[11]题[旋转数组的最小数字][二分法][分治]

【问题描述】[简单] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示…

html:(27):类和ID选择器的区别和子选择器

类和ID选择器的区别 学习了类选择器和ID选择器,我们会发现他们之间有很多的相似处,是不是两者可以通用呢?我们不要着急先来总结一下他们的相同点和不同点: 相同点:可以应用于任何元素不同点: 1、ID选择器…

对象的释放Dispose和Close对比

C#内存释放的几个方法对比: 而Close与Dispose这两种方法的区别在于,调用完了对象的Close方法后,此对象有可能被重新进行使用;而Dispose方法来说,此对象所占有的资源需要被标记为无用了,也就是此对象被销毁了…

html:(28):后代选择器和通用选择器

包含(后代)选择器 包含选择器,即加入空格,用于选择指定标签元素下的后辈元素。如右侧代码编辑器中的代码: .first span{color:red;} 这行代码会使第一段文字内容中的“胆小如鼠”字体颜色变为红色。 请注意这个选择器与子选择器的区别,子…

ZOJ -3203 三分+数学

题意:给出光的高度,人的高度,还有屋子的宽度本题就是要求人站在什么地方影长最长 输出最长的影长数学题可以把这道题的分段公式推出来然后分类讨论x在不同的范围获得不同的大小或者把影长公式推出来发现是凸函数 可以求极值点 然后三分求 三…

Java异常面试题

Java异常架构与异常关键字Java异常简介Java异常架构1. Throwable2. Error(错误)3. Exception(异常)运行时异常编译时异常4. 受检异常与非受检异常受检异常非受检异常Java异常关键字Java异常处理声明异常抛出异常捕获异常如何选择异…

html:(29):伪选择符和分组选择符

伪类选择符 更有趣的是伪类选择符,为什么叫做伪类选择符,它允许给html不存在的标签(标签的某种状态)设置样式,比如说我们给html中一个标签元素的鼠标滑过的状态来设置字体颜色: a:hover{color:red;} 上面…

[Leedcode][JAVA][第837题][新21点][动态规划][数学]

【问题描述】[中等] 爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下:爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是…

Java学习笔记1(零碎笔记)——基础

目录命名流程控制方法OOP异常其它命名 变量、方法:驼峰命名 类:首字母大写+驼峰命名 流程控制 增强型for循环: for(数据类型 名称 : 数组){(操作) }(意思是遍历数组,从数组的0号…

扩展欧几里得算法 POJ 1061

根据此题 整理下 扩展欧几里得 扩展欧几里得是用来判断并求 ax by c 是否有解及其解的数学算法 首先列出定理 1、ax by gcd(a,b) 2、gcd(a,b) gcd(b, a%b); 本题 题意是 判断两个同向的青蛙 在初始位置(x,y),速度不同(m,n)的情况下能否在一个球形路线(周长为…

html:(30):继承和特殊性

继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代。比如下面代码:如某种颜色应用于p标签,这个颜色设置不仅应用p标签&…

[剑指offer][JAVA]面试题第[12]题[矩阵的路径][DFS][剪枝]

【问题描述】[中等] 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入…

Java学习笔记2——常用类

目录1 内部类1.1 成员内部类1.2 静态内部类1.3 局部内部类1.4 匿名内部类2 Object类2.1 getClass()方法2.2 hashCode()方法2.3 toSring()方法2.4 equals()方法2.5 finalize()方法3 包装类3.1 类型转换与装箱、拆箱3.2 整数缓冲区4 String类4.1 常用方法4.2 可变字符串5 BigDeci…

Mysql密码忘记了怎么办?

停止mysql: sudo /etc/init.d/MySQL stop(可能有其它的方法,总之停止MySQLd的运行就可以了) 修改mysql的配置文件: 在/etc/mysql/mysql.conf.d/mysqld.cnf文件中添加skip-grant-tables,每台电脑的文件位置可能不同。 重新启动mysq…

html:(31):层叠和重要性

层叠 我们来思考一个问题:如果在html文件中对于同一个元素可以有多个css样式存在并且这多个css样式具有相同权重值怎么办?好,这一小节中的层叠帮你解决这个问题。 层叠就是在html文件中对于同一个元素可以有多个css样式存在,当有…