由于项目需要,研究了一下 celery和rabbitmq
首先保证你有python(我用的Python3)
celery部分:
安装celery
pip install celery
然后创建一个tasks.py 文件
from celery import Celery
app = Celery('tasks', broker='amqp://guest:guest@127.0.0.1:5672//')
@app.task
def add(x, y):
return x + y
这样celery 部分就ok了。
-------------------------
rabbitmq 部分:
首先你需要在本地安装docker, 安装过程请自行百度,这里不赘述。
然后 不需要单独pull docker image 直接在本地运行下面docker 指令就会自动启动rabbitmq
docker run -d --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management
接下来 在终端中运行下列命令,开启一个worker(相当于MQ 的消费者)
celery -A tasks worker --loglevel=info
output
(py3env) hostname:test$ celery -A tasks worker --loglevel=info
-------------- celery@hostname.local v4.1.0 (latentcall)
---- **** -----
--- * *** * -- Darwin-17.5.0-x86_64-i386-64bit 2018-05-02 17:56:20
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: tasks:0x1024b0f28
- ** ---------- .> transport: amqp://guest:**@127.0.0.1:5672//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. tasks.add
[2018-05-02 17:56:21,248: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2018-05-02 17:56:21,577: INFO/MainProcess] mingle: searching for neighbors
[2018-05-02 17:56:23,798: INFO/MainProcess] mingle: all alone
[2018-05-02 17:56:25,158: INFO/MainProcess] celery@hostname.local ready.
在开启一个终端,向MQ 添加任务(生产者)
>>> from tasks import add
>>> add.delay(4, 4)
output
>>> from tasks import add
>>> add.delay(4,4)
<AsyncResult: c2a87cc9-80b3-4525-80c6-6e291c960581>
>>> add.delay(4,14)
<AsyncResult: 41186edd-95c2-443f-b62a-56a7542cb259>
-------------------------
Flower
最后可以使用flower 来对这个组合进行监控。
安装
pip install flower
或者
easy_install flower
然后输入:
celery flower --broker=amqp://guest:guest@127.0.0.1:5672//
output
[I 180502 17:22:44 command:139] Visit me at http://localhost:5555
[I 180502 17:22:44 command:144] Broker: amqp://guest:**@127.0.0.1:5672//
[I 180502 17:22:44 command:147] Registered tasks:
['celery.accumulate',
'celery.backend_cleanup',
'celery.chain',
'celery.chord',
'celery.chord_unlock',
'celery.chunks',
'celery.group',
'celery.map',
'celery.starmap']
[I 180502 17:22:44 mixins:224] Connected to amqp://guest:**@127.0.0.1:5672//
打开连接
http://localhost:5555 就可以实时监控这个组合了。