Celery是Python开发的分布式任务调度模块。

Celery本身不含消息服务,它使用第三方消息服务来传递任务。

django下有个分支Django-Celery,可以结合django来实现任务的编排,计划。

我既然已经选择了使用django作为用户界面,那么后台数据抓取,自动处理,要有一个分布式异步任务调度来处理。一般都选的Celery,而且方便结合django管理。

官方文档中关于版本的介绍,下一个版本Celery 5.X,就不支持python2.7了,我们就直接用最新版吧:

python 3.6.3  celery 4.1.0 celery-with-redis

OS:windows10 home x64

IDE:Pycharm

 

1.1 Brokers

brokers 中文意思为中间人,在这里就是指任务队列本身,Celery 扮演生产者和消费者的角色,brokers 就是生产者和消费者存放/拿取产品的地方(队列)

常见的 brokers 有 rabbitmq、redis、Zookeeper 等

1.2 Result Stores / backend

顾名思义就是结果储存的地方,队列中的任务运行完后的结果或者状态需要被任务发送者知道,那么就需要一个地方储存这些结果,就是 Result Stores 了

常见的 backend 有 redis、Memcached 甚至常用的数据都可以。

1.3 Workers

就是 Celery 中的工作者,类似与生产/消费模型中的消费者,其从队列中取出任务并执行

1.4 Tasks

就是我们想在队列中进行的任务咯,一般由用户、触发器或其他操作将任务入队,然后交由 workers 进行处理。

理解以上概念后我们就可以快速实现一个队列的操作:

Celery version 4.0 runs on,

  • Python (2.7, 3.4, 3.5)
  • PyPy (5.4, 5.5)

This is the last version to support Python 2.7, and from the next version (Celery 5.x) Python 3.5 or newer is required.

If you’re running an older version of Python, you need to be running an older version of Celery:

  • Python 2.6: Celery series 3.1 or earlier.
  • Python 2.5: Celery series 3.0 or earlier.
  • Python 2.4 was Celery series 2.2 or earlier.

消息服务

Name Status Monitoring Remote Control
RabbitMQ Stable Yes Yes
Redis Stable Yes Yes
Amazon SQS Stable No No
Zookeeper Experimental No No

看来稳定的只有 RabbitMQ 和Redis。linux一定没问题。

windows下我想装RabbitMQ的时候,又要我先装其他的软件,比较烦这些乱装的东西,那就去看Redis,没有windows版,不过有个windows另外开发的。

只有64位版,32位版的系统就不要想了,去看看RabbitMQ吧。

https://github.com/MicrosoftArchive/redis

直接去releases下载zip,解压有这些东西:

redis-benchmark.exe         #基准测试
redis-check-aof.exe # aof
redis-cli.exe # 客户端
redis-server.exe # 服务器
redis.windows.conf # 配置文件

默认的也不用改什么,双击redis-server.exe,启动redis

[]  Dec ::13.873 # Warning: no config file specified, using the default config. In order to specify a config file use E:\Redis-x64-3.2.\redis-server.exe /path/to/redis.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2. (/) bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port:
| `-._ `._ / _.-' | PID: 9920
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-' [] Dec ::13.883 # Server started, Redis version 3.2.
[] Dec ::13.883 * The server is now ready to accept connections on port

双击redis-cli.exe

进行一下连接测试:命令有set get

127.0.0.1:> set name jack
OK
127.0.0.1:> get name
"jack"
127.0.0.1:>

set返回OK

get返回刚才设置的值

一切正常。

这都测试用着方便,你要部署生产环境,现在推荐的是docker

创建tasks.py

from celery import Celery
#地址最后的/0是指使用数据库0,生产环境这个redis可能给多个服务提供服务。
app = Celery('tasks', broker='redis://127.0.0.1:6379/0')
@app.task
def add(x, y):
return x + y

启动worker

在tasks.py目录下运行

celery -A tasks worker --loglevel=info

调用任务:

创建run.py,这里线使用delay方法。

from tasks import add
add.delay(4, 4)

  你会在celery的worker窗口,看到运行的结果

[-- ::,: INFO/MainProcess] Received task: tasks.add[997ac417--4bfa--462f33331c6d]
[-- ::,: INFO/MainProcess] Task tasks.add[997ac417--4bfa--462f33331c6d] succeeded in .014999999984866008s:

至此,celery运行环境已经配置演示完成。

包括python运行,使用的IDE

包括redis 服务,使用windows版redis绿色运行

包括worker,使用命令行celery运行。

下面要研究celery返回值的处理。

celery(一)分布式任务调度模块简介及运行环境的更多相关文章

  1. [原]iBatis.Net(C#)系列一:简介及运行环境

    转载请注明http://www.cnblogs.com/13590/archive/2013/02/27/2934580.html 摘要:介绍iBatis.Net的基本情况和运行原理,运行环境中各参数 ...

  2. mybatis3.0-[topic10-14] -全局配置文件_plugins插件简介/ typeHandlers_类型处理器简介 /enviroments_运行环境 /多数据库支持/mappers_sql映射注册

    mybatis3.0-全局配置文件_   下面为中文官网解释 全局配置文件的标签需要按如下定义的顺序: <!ELEMENT configuration (properties?, setting ...

  3. python学习-Python简介以及运行环境

    Python语言是全世界几百种编程语言中的一个,诞生时间不算长,但是现在已经成为很热门的语言,近几年在TIOBE排行榜一直呈现上升趋势,截止19年2月,python已经超过C++成为排名第三的语言. ...

  4. python—Celery异步分布式

    python—Celery异步分布式 Celery  是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向brok ...

  5. Celery异步的分布式任务调度理解

    什么是Celery呢? Celery是一个用Python开发的异步的分布式任务调度模块. Celery本身不包含消息服务,使用第三方消息服务,也就是Broker,来传递任务,目前支持的有Rebbimq ...

  6. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  7. Spark on YARN简介与运行wordcount(master、slave1和slave2)(博主推荐)

    前期博客 Spark on YARN模式的安装(spark-1.6.1-bin-hadoop2.6.tgz +hadoop-2.6.0.tar.gz)(master.slave1和slave2)(博主 ...

  8. Hadoop-01 搭建hadoop伪分布式运行环境

    Linux中配置Hadoop运行环境 程序清单 VMware Workstation 11.0.0 build-2305329 centos6.5 64bit jdk-7u80-linux-x64.r ...

  9. TensorFlow分布式在Amazon AWS上运行

    TensorFlow分布式在Amazon AWS上运行 Amazon AWS 提供采用 NVIDIA K8 GPU 的 P2.x 机器.为了能够使用,第一步还需要创建一个 Amazon AWS 账户, ...

随机推荐

  1. Python3基础 生成器推导式 简单示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  2. 递增三元组|2018年蓝桥杯B组题解析第六题-fishers

    标题:递增三元组 给定三个整数数组 A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN], 请你统计有多少个三元组(i, j ...

  3. C#用Linq查询Combox的数据源

    https://www.cnblogs.com/sufei/archive/2010/01/12/1645763.html var result =  ((DataTable) (this.ComSh ...

  4. 启动Sql server的服务CMD命令

    启动:net start mssqlserver 停止:net stop mssqlserver

  5. c++ 数组元素拷贝到容器(copy)

    #include <iostream> // cout #include <algorithm> // copy #include <vector> // vect ...

  6. Windows10中注册 regsvr32 xxx.ocx报错but the call to DIIRegisterServer failed with error code 0x80040200

    网站中有读取居民身份证的机器,需要安装一些注册activeX控件然后进入指定目录下执行以下命令regsvr32 xxx.ocx报了个错: but the call to DIIRegisterServ ...

  7. C++创建虚拟机调用JAVA类

    ZC: 简要摘抄: “ 1.      Object类出创建JVM. 使用Java类之前必须要创建JVM环境.JDK由java.exe来完成.本文有Object类的静态方法BeginJVM来创建,用E ...

  8. 在ANE插件中启动AIR开发的Android应用

    在Android原生应用开发中,启动一个应用非常容易: Intent __intent = new Intent(this, YourAppActivity.class); startActivity ...

  9. Codeforces 893E - Counting Arrays

    893E - Counting Arrays 思路:质因子分解. 对于每个质因子,假设它有k个,那么求把它分配到y个数上的方案数. 相当于把k个小球分配到y个盒子里的方案数. 这个问题可以用隔板法(插 ...

  10. 顶点与UV

    1.顶点坐标和UV坐标是三维模型重要的两个坐标系统. 2.什么是UV?UV分别是图像在显示器水平和垂直方向上坐标,值在 0 - 1 之间 ,即水平方向的第 U 个做像素/图片宽度,垂直方向的第 V 个 ...