CELERY 测试多服务器

1.安装虚拟环境

1.1 安装pipenv

使用pip安装pipenv虚拟环境,比virtualenv使用更方便
pip install pipenv

1.2 创建虚拟环境

创建文件夹,例如env1和env2,然后分别进入文件夹下,使用命令创建虚拟环境
pipenv install

1.3 启动虚拟环境

如果需要启动虚拟环境,需要到响应的文件夹,例如env1,然后打开终端cmd,使用命令
pipenv shell
启动后,终端显示为
(env1-p9sPCrEF) E:\CODE\CeleryStudy
p9sPCrEF是虚拟环境的名称,在路径下可找到对应的文件夹。
虚拟环境的路径是:
C:\Users\chentao1\.virtualenvs\env1-p9sPCrEF

2.安装库

虚拟环境里默认只配置了python版本,所以对于用上的库需要重新安装,并且虚拟环境间是独立的,如果有多个虚拟机环境,则需要多次安装。

2.1 eventlet

在使用celery4.x时,必须安装这个,否则无法使用
pipenv install eventlet

2.2 安装celery

pipenv install celery

2.3 安装redis

pipenv install redis

3.实例

3.1 celery配置

celeryconfig.py

BROKER_URL = 'redis://127.0.0.1:6379/7' #中间件
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/8'  #保存结果

CELERY_TASK_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_CONCURRENCY = 8

3.2 实际代码

from celery import Celery
import time
import celeryconfig

app = Celery('tasks')
app.config_from_object('celeryconfig')  #加载配置

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

@app.task
def mul(x,y,z):
    time.sleep(0.2)
    return x * y * z

4. 运行CELERY

4.1 执行指令

分别启动两个虚拟环境后,输入命令(不要忘记加上-P eventlet):
celery -A tasks worker --loglevel=info -P eventlet
正常启动后会打印一下信息:

[tasks]
  . tasks.add
  . tasks.hostname

[2018-09-05 14:11:15,556: INFO/MainProcess] Connected to redis://127.0.0.1:6379/
7
[2018-09-05 14:11:15,565: INFO/MainProcess] mingle: searching for neighbors
[2018-09-05 14:11:16,589: INFO/MainProcess] mingle: all alone
[2018-09-05 14:11:16,603: INFO/MainProcess] pidbox: Connected to redis://127.0.0
.1:6379/7.
[2018-09-05 14:11:16,608: INFO/MainProcess] celery@CHENTAO1 ready.

4.2 命令解释

-A : 代表的是Application的首字母,我们的应用是在tasks.py中定义的
worker : 表示的是工人,执行任务用的
--loglevel=info : 打印LOG等级,用来观察任务执行情况
-P eventlet : celery4.x中必须添加的,不然会报错

4.3 执行

执行代码:

from tasks import add,mul

for _ in range(100):
    m = mul.delay(11,33,55)
    a = add.delay(10,250)

    print(m.get())
    print(a.get())

两个虚拟环境都启动celery后,都会打印出下列的信息。

[2018-09-05 14:36:05,690: INFO/MainProcess] Task tasks.mul[0fa4f82b-a462-4c1d-ab
1a-1a16ffa90120] succeeded in 0.20300000000861473s: 19965
[2018-09-05 14:36:05,795: INFO/MainProcess] Received task: tasks.add[80962729-9f
b8-48b9-8e72-dedf029eab27]
[2018-09-05 14:36:06,103: INFO/MainProcess] Task tasks.add[80962729-9fb8-48b9-8e
72-dedf029eab27] succeeded in 0.3119999999908032s: 260
[2018-09-05 14:36:06,114: INFO/MainProcess] Received task: tasks.add[734f212d-9a
f9-4b61-b640-7b4ec45f27f1]

如果先在两个虚拟环境中启动了celery,在运行过程中再启动第三个虚拟环境,也会自动接收任务并执行,打印结果。

5.参考

[https://blog.csdn.net/freeking101/article/details/74707619](https://blog.csdn.net/freeking101/article/details/74707619)
[http://docs.celeryproject.org/en/latest/index.html](http://docs.celeryproject.org/en/latest/index.html)

你可能感兴趣的:(CELERY 测试多服务器)