一篇还不错的入门说明: http://www.bjhee.com/celery.html,

官方文档: http://docs.jinkan.org/docs/celery/getting-started/brokers/redis.html

这里不多说重复内容,只讲一下结构上的理解:

celery不仅是队列,它是一个并行分布式框架

你不需要考虑怎么分布式,怎么写daemon进程,只需要关注你的单个任务要怎么处理。当你把单个任务处理的代码放入celery框架之后,它就自带了并行分布式、后台持续运行的特点。

celery使用redis,rabbitMQ等作为broker,它的两个角色:任务发送方(生产者)把任务放入队列,worker(消费者)从队列中取出任务进行处理。这两个角色并不要求在同一台机器上,且可以有多台机器上的多个生产者,也可以有多台机器上的多个worker。

celery的生产者和消费者怎么知道该使用哪个函数执行任务呢?这其实是使用了反射机制,以官方文档getting started例子来说,即:

当生产者使用

from my_tasks import add
ret = add.delay(3, 4)

把这个任务放入队列的时候,同时放入了my_tasks.add这个函数名,消费者取出任务的同时会取出这个my_tasks.add并调用自己的已经导入的这个函数进行处理。

所以在生产者、消费者的导入上需要注意,否则消费者会报找不到函数的。

(注意:在文件夹folder中使用from .my_tasks import add导入的add将会被当成folder.my_tasks.add!!)

Python系列之反射、面向对象 https://www.cnblogs.com/yyyg/p/5554111.html


生产者和消费者都需要导入一个定义了任务的同名文件(如:my_tasks.py),注意是同名文件,而不必是同一文件。(当生产者和消费者不在同一台机器上,自然无法是同一文件...)

消费者所导入的my_tasks文件中,当然需要包含详细的处理过程,但是生产者所导入的my_tasks文件,作用却和C/C++中的头文件差不多。


重新构造AsyncResult对象

上面调用ret = add.delay(3, 4)时,返回的 ret 是一个AsyncResult对象,可以使用 ret.ready() 查看任务是否执行完毕,使用ret.get(timeout=xx)获取执行结果。(需要配置backend)

当任务很多的时候,我是不是可以把这些任务的id写入文本文件或者数据库,等过一段时间再来查询某个任务的状态呢?

当然可以,ret这个AsyncResult对象可以使用ret.id这个字符串重新构造:

ret
<AsyncResult: b733c852-4161-449e-930a-a395702b1203>
ret.id
'b733c852-4161-449e-930a-a395702b1203'
# 构造:
import tasks # 为了导入backend配置,不必重复导入
from celery.result import AsyncResult
r=AsyncResult('b733c852-4161-449e-930a-a395702b1203')
r
<AsyncResult: b733c852-4161-449e-930a-a395702b1203>
r.ready()
True # 任务已执行完毕
r.get(timeout=3)
。。。。

Python3.7安装celery,运行时可能报错:

File "/Users/li/.venv/venv-myprojet/lib/python3.7/site-packages/celery/backends/redis.py", line 22
from . import async, base
^
SyntaxError: invalid syntax

原因是Python3.7的async重命名了

[Rename `async` to `asynchronous` (async is a reserved keyword in Python 3.7) #4879](https://github.com/celery/celery/pull/4879)

开发人员已经处理了这个issue,合并了master,快速的解决方案是通过github安装celery,命令如下:

pip install --upgrade https://github.com/celery/celery/tarball/master

celery使用的小记录的更多相关文章

  1. Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)

    Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: class Star8 { public static void m ...

  2. Java 需要记得、了解的关键词 (Java 学习中的小记录)

    Java 需要记得.了解的关键词 (Java 学习中的小记录)     作者:王可利(Star·星星) 总结:本次随笔,仅且拿来平时翻阅记忆用

  3. 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)

    关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)   作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...

  4. 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)

    利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)   作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...

  5. html/css 盒子布局 Margin 、Padding 、border 以及 清除浮动的知识 (学习HTML过程中的小记录)

    html/css  盒子布局 Margin .Padding .border 以及 清除浮动的知识 (学习HTML过程中的小记录) 作者:王可利(Star·星星) width     是"宽 ...

  6. NDK开发小记录 C++读取java层对象内容

    这是自己NDK开发得小记录,关于C++层读取java层传来的对象内容. 很简单的一个例子, 1.首先在java层定义了一个类NumList: public class NumList { public ...

  7. centos 6.X minimal 系列最小化安装完成后,安装mono和jexus过程小记录

    在使用虚拟机安装minimal版centos运行mono+jexus的时候,遇到了一些坑,记录一下,比如虚拟机访问不了网络,没wget命令没开放80端口,等等小问题,其他网上教程已经有mono+jex ...

  8. Backbone小记录

    前言 这两天看了下Backbone.js的知识,大概了解了这个框架的一些知识. 写篇博客总结一下. Backbone.js是一个web端javascript的轻量级MVC框架.为什么说是轻量级呢?因为 ...

  9. HorizontalScrollView做页卡的一个小记录

    用HorizontalScrollView做页卡,实现一个如下图的效果:

随机推荐

  1. DataX简介

    DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.Postgre.HDFS.Hive.ADS.HBase.TableStore(O ...

  2. Vue内敛模板

    在学习<Vue实战>一书时,学习到组件高级应用-内联模板这一小节时,照着书上的例子敲了一遍,发现未达到预期,切报错. 书上源代码如下: <!DOCTYPE html> < ...

  3. vue实现全选反选--简单使用

    最近需要用到vue的反选全选功能,于是就在网上找了一些代码实现,发现都不能够完美的实现.于是乎决定自己写出一套.经过一翻努力,完美了进行了实现.bug也已经修复完毕,希望能够帮助到大家!   < ...

  4. 如何判断一个List集合中是否有空值

    list.Any(v => string.IsNullOrWhiteSpace(v))

  5. php7类型约束的意义

    在PHP7之前,函数和类方法不需要声明变量类型,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格. 为了解决这个问题,PHP7引入了类型声明. 目前有两类变量可以声明 ...

  6. Anaconda基本命令

    创建环境 conda create --name bunnies python=3 astroid babel 列出所有环境 conda info --envs 或 conda env list 克隆 ...

  7. 负载均衡中间件(一)Nginx高性能负载均衡器

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/PO3)代理服务器,并在一个BSD协议下发行,可以在UNIX.GNU/Linux.BSD.Mac OS X.Solaris,以 ...

  8. 【leetcode】915. Partition Array into Disjoint Intervals

    题目如下: 解题思路:题目要求的是在数组中找到一个下标最小的index,使得index左边(包括自己)子序列的最大值小于或者等于右边序列的最小值.那么我们可以先把数组从最左边开始到数组最右边所有子序列 ...

  9. apue 第6章 系统数据文件和信息

    在给出用户登录名或数值用户ID后,这两个函数就能查看相关项. #include <sys/types.h> #include <pwd.h> struct passwd *ge ...

  10. 集训队8月1日(拓扑排序+DFS+主席树入门)

    上午看书总结 今天上午我看了拓扑排序,DFS+剪枝,相当于回顾了一下,写了三个比较好的例题.算法竞赛指南93~109页. 1.状态压缩+拓扑排序 https://www.cnblogs.com/246 ...