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)