上篇文章中,已经介绍了celery和RabbitMQ的安装以及基本用法。

本文将从工程的角度介绍如何使用celery。

1.配置和启动RabbitMQ

请参考celery+RabbitMQ实战记录

2. 安装和使用celery

2.1 创建虚拟环境,并安装celery

$ mkdir celery_demo
$ cd celery_demo
$ virtualenv -p python3 venv3
$ ./venv3/bin/pip install celery

项目的目录结构说明:

-- celery_demo
-- api.py
-- celeryconfig.py
-- rocket
-- celery.py
-- tasks.py

2.2 配置celery

创建配置文件 celeryconfig.py,里面包含CELERY_IMPORTSBROKER_URLCELERYD_LOG_FORMATCELERY_ROUTES.

# celeryconfig.py

RABBIT_MQ = {
'HOST': '127.0.0.1',
'PORT': 5672,
'USER': 'test',
'PASSWORD': '123456'
} CELERY_IMPORTS = ("rocket.tasks", ) BROKER_URL = 'amqp://%s:%s@%s:%s/myvhost' % (RABBIT_MQ['USER'], RABBIT_MQ['PASSWORD'], RABBIT_MQ['HOST'], RABBIT_MQ['PORT']) CELERYD_LOG_FORMAT = '[%(asctime)s] [%(levelname)s] %(message)s' CELERY_ROUTES = {
'rocket.tasks.add': {'queue': 'sunday'},
}

其中,参数定义如下:

  • CELERY_IMPORTS 导入的task

  • BROKER_URL指定了broker信息,即消息队列的地址。

  • CELERYD_LOG_FORMAT 指定了日志格式。

  • CELERY_ROUTES 指定了路由信息,即调用rocket.tasks.add后,消息具体放入哪个队列,这里是队列名称为sunday

2.3 创建celery实例

创建目录

mkdir rocket

在rocket目录下,创建文件celery.py

from celery import Celery

app = Celery("orange", backend='amqp')
app.config_from_object("celeryconfig")

创建实例,并读取配置。

2.4 定义tasks

在rocket目录下,创建文件tasks.py

from rocket.celery import app

@app.task
def add(x, y):
return x + y

定义tasks。

2.5 启动celery(即消费者)

确认当前所在的目录:

$ pwd
/workspace/celery_demo

启动消费者

$ ./venv3/bin/celery worker  -A rocket -Q sunday --loglevel=info  -f app.log

/workspace/celery_demo/venv3/lib/python3.6/site-packages/celery/backends/amqp.py:67: CPendingDeprecationWarning:
The AMQP result backend is scheduled for deprecation in version 4.0 and removal in version v5.0. Please use RPC backend or a persistent backend. alternative='Please use RPC backend or a persistent backend.') celery@admindeMacBook-Pro-2.local v4.3.0 (rhubarb) Darwin-18.2.0-x86_64-i386-64bit 2019-04-22 20:53:56 [config]
.> app: orange:0x10abdb6d8
.> transport: amqp://test:**@127.0.0.1:5672/myvhost
.> results: amqp://
.> concurrency: 8 (prefork)
.> task events: OFF (enable -E to monitor tasks in this worker) [queues]
.> sunday exchange=sunday(direct) key=sunday [tasks]
. rocket.tasks.add

2.6 生产者

创建文件api.py,会调用apply_async向队列中投放消息。

# api.py
from rocket.tasks import add print("start...") result = add.apply_async((1, 2), expires=10) print("result:", result)
print(result.ready()) print("end...")

执行api.py,启动生产者

./venv3/bin/python api.py
start...
result: 6ef453e6-1797-4dd7-a2fc-bd6ef8096fde
True
end...

2.6 查看结果

查看日志文件app.log

[2019-04-23 09:53:46,406] [INFO] Connected to amqp://test:**@127.0.0.1:5672/myvhost
[2019-04-23 09:53:46,420] [INFO] mingle: searching for neighbors
[2019-04-23 09:53:47,455] [INFO] mingle: all alone
[2019-04-23 09:53:47,474] [INFO] celery@admindeMacBook-Pro-2.local ready.
[2019-04-23 09:53:55,850] [INFO] Received task: rocket.tasks.add[6ef453e6-1797-4dd7-a2fc-bd6ef8096fde] expires:[2019-04-23 01:54:05.817853+00:00]
[2019-04-23 09:53:55,876] [INFO] Task rocket.tasks.add[6ef453e6-1797-4dd7-a2fc-bd6ef8096fde] succeeded in 0.023095715092495084s: 3

参考

using celery in project

celery+RabbitMQ 实战记录2—工程化使用的更多相关文章

  1. rabbitmq实战:一、天降奇兵

    缘由,最近换了工作,而新的项目中使用了celery+rabbitmq来实现一个分布式任务队列系统,为了能够维护好这套系统,只能来学习一下这两个组件,顺便把学习笔记记录下来,留作以后回顾,当然如果碰巧能 ...

  2. Java SpringBoot集成RabbitMq实战和总结

    目录 交换器.队列.绑定的声明 关于消息序列化 同一个队列多消费类型 注解将消息和消息头注入消费者方法 关于消费者确认 关于发送者确认模式 消费消息.死信队列和RetryTemplate RPC模式的 ...

  3. 【RabbitMQ学习记录】- 消息队列存储机制源码分析

    本文来自 网易云社区 . RabbitMQ在金融系统,OpenStack内部组件通信和通信领域应用广泛,它部署简单,管理界面内容丰富使用十分方便.笔者最近在研究RabbitMQ部署运维和代码架构,本篇 ...

  4. rabbitMQ实战(一)---------使用pika库实现hello world

    rabbitMQ实战(一)---------使用pika库实现hello world 2016-05-18 23:29 本站整理 浏览(267)     pika是RabbitMQ团队编写的官方Pyt ...

  5. websocket+rabbitmq实战

    1. websocket+rabbitmq实战 1.1. 前言   接到的需求是后台定向给指定web登录用户推送消息,且可能同一账号会登录多个客户端都要接收到消息 1.2. 遇坑 基于springbo ...

  6. RabbitMQ实战经验分享

    前言 最近在忙一个高考项目,看着系统顺利完成了这次高考,终于可以松口气了.看到那些即将参加高考的学生,也想起当年高三的自己. 下面分享下RabbitMQ实战经验,希望对大家有所帮助: 一.生产消息 关 ...

  7. RabbitMQ安装记录(windows10)

    RabbitMQ安装记录(windows10)   一.安装包准备 otp_win64_R16B03.exe(这里使用该版本,不支持ssl) otp_win64_19.0.exe(如果要开启ssl,请 ...

  8. 升级 Elasticsearch 集群数量实战记录

    搜索引擎 升级 Elasticsearch 集群数量实战记录 现在线上有一个elasticsearch集群搜索服务有三台elasticsearch实例(es1.es2.es3),打算将其升级为5台(增 ...

  9. RabbitMQ上手记录–part 6-Shovel

    上一part<RabbitMQ上手记录–part 5-节点集群高可用(多服务器)>讲到了通过多个服务器来搭建RabbitMQ的节点集群,示例当中提到的服务器都是在同一个局域网中的(实际上是 ...

随机推荐

  1. Visual Studio项目属性的生产平台,如何改为X64?

    如图,我把平台改为x64,可是按打叉,退出后,再进入项目属性,还是 x86,没变. 解决方法: 选择 Setup1项目, 选择"属性" ->选择 "配置管理器&qu ...

  2. sql注入2

    一.查询数据库的版本号 http://10.1.2.5:10631/sqli/Less-2/?id=-1 union select 1,2,version() 二.查询数据库中所有的库名 http:/ ...

  3. 剑指Offer 65. 矩阵中的路径 (回溯)

    题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...

  4. 移动端轮播图vue-awesome-swiper

    日常写设计文档,日常写Demo,写轮播图的时候觉得bootstrap不适合移动端,或者说不是轻量级的,于是换成Swiper,但是写的时候才发现怎么把这东西嵌到Vue里面啊? Σ( ° △ °|||)︴ ...

  5. 2018-计算机系机试(第二批)-D-最小差值

    单点时限: 2.0 sec 内存限制: 256 MB 输入 n 个整数,输出最小差值.最小差值指所有数之间差的绝对值的最小数. 例如:3 个整数 1,2 和 6 的最小差值是 1. 输入格式 第一个数 ...

  6. cocoapod podpackage 自动根据podfile生成framework实现二进制化,原创脚本,转载请注明出处

    #!/bin/bash # created by lichanghong ; mail: lichanghong@soyoung.com # XXX.sh  AFNetworking 3.0.0 se ...

  7. django用MySQL数据库链接

    在使用的过程中出现了没有mysqld.sock这个文件的情况,无法连接到mysql数据库. 几经周折,设置路径,改文件夹的权限,也都无济于事,只有重新安装mysql服务器,第一次尝试还是失败,服务器安 ...

  8. 使用linux命令行调整非图形界面分辨率

    第一步,调整linux内核显示参数: 打开内核菜单配置列表文件: vi /boot/grub/menu.lst 或者 vi /boot/grub/gurb.conf 在kernel设置一行末尾添加: ...

  9. MT4 取K线

    目标:动态获取最新K线并通过DLL发送出去,symbols和periods可配置. //+------------------------------------------------------- ...

  10. eclipse启动tomcat错误解决

    clipse启动tomcat报出下面的错误提示: 控制台: 九月 06, 2018 9:01:31 下午 org.apache.tomcat.util.digester.SetPropertiesRu ...