项目中使用Celery |
1. 项目目录结构
project
|-- __init__.py
|-- celery.py # 配置文档
|-- tasks.py # 任务函数
|-- tasks2.py # 任务函数
2. 项目文件
project/celery.py
# from celery import Celery 默认当前路径,更改为绝对路径(当前路径有个celery.py文件啦)
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('project',
broker='redis://localhost',
backend='redis://localhost',
include=['project.tasks','project.tasks2']) # 配置文件和任务文件分开了,可以写多个任务文件
# app 扩展配置
app.conf.update(
result_expires=3600,
)
if __name__ == '__main__':
app.start()
celery.py作用相当于配置文件
project/tasks.py
from __future__ import absolute_import, unicode_literals
from .celery import app
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
project/tasks2.py
from __future__ import absolute_import, unicode_literals
from .celery import app
@app.task
def hello():
return 'Hello World'
3. 启动项目worker
celery -A project worker -l info
其中 project 为项目名
另启终端,与project同目录进入python3
4. 实现分布式
当启动多个时 celery -A project worker -l info,去broker去相应任务,实现分布式
5. 后台启动woker
celery multi start w1 -A project -l info
celery multi start w2 -A project -l info
celery multi start w3 -A project -l info
celery multi restart w1 -A project -l info
celery multi stop w1 w2 w3 # 任务立刻停止
celery multi stopwait w1 w2 w3 # 任务执行完,停止