CELERY 入门实例

2018-10-21  本文已影响88人  MoonMonsterss

0.安装CELERY

pip install celery

1.文件结构

--- demo文件夹
    --- current_app
        --- __init__.py
        --- task1.py
        --- task2.py
        --- celeryconfig.py
    --- client.py

2.创建Celery对象

broker = 'redis://127.0.0.1:6379'   # 用redis做broker,中间件
backend = 'redis://127.0.0.1:6379/0'    # 用redis做broken,用来保存结果

app = Celery('tasks',broker=broker,backend=backend)

但一般不会这么写,会把相关配置写到一个配置文件中,然后加载出来。
celeryconfig.py

BROKER_URL = 'redis://127.0.0.1:6379'   # 指定broker
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' # 指定backend

CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_IMPORTS = (  # 指定需要导入的任务模块
    'celery_app.task1', # task1和task2是模块名称
    'celery_app.task2',
)

__init__.py

from celery import Celery

app = Celery('celery_app')
app.config_from_object('celery_app.celeryconfig')   # 使用config_from_object函数加载一个配置文件

3.具体任务

app是Celery对象,app.task的作用是创建一个任务
task1.py

import time
from celery_app import app

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

task2.py

import time
from celery_app import app

@app.task
def multiply(x,y):
    time.sleep(2)
    return x * y

4.运行Celery职程服务器

切换到程序的主目录下,即当前程序的demo目录下,然后执行以下命令:
celery -A celery_app worker --loglevel=info -P eventlet
在win10 + celery4.x 上,如果不加上 eventlet 会报错,
ERROR/MainProcess] Task handl or(‘not enough values to unpack (expected 3, got 0)’,)
所以需要先安装
pip install eventlet



<b>纠正</b>: 结合第一部分看,该处是使用了并发池,也可以换成另外三个,例如
celery -A celery_app worker -l info -P gevent


选项 -A/--app,指定Celery项目,如果参数是一个Package,那么celery cmd会自动搜索celery.py模块,也可以使用app所在的module_name作为参数。celery cmd最终要加载的实际是app对象。

5.启动程序

client.py

from celery_app import task1
from celery_app import task2

print('start')

res1 = task1.add.apply_async(args=[2,8])
res2 = task2.multiply.apply_async(args=[3,7])

print(res1.get())   # get函数可以获取返回值
print(res2.get())

print('End')

输出结果:

start
10
21
End

6.参考

http://docs.jinkan.org/docs/celery/getting-started/first-steps-with-celery.html#celerytut-troubleshooting
https://blog.csdn.net/chenqiuge1984/article/details/80127446
https://blog.csdn.net/Jmilk/article/details/79052669
上一篇 下一篇

猜你喜欢

热点阅读