二、Celery基本命令和配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luhu124541/article/details/88544410
1、在django的每一个APP中创建独立的tasks模块:
from celery import Celery

app=Celery("tasks", broker="redis://localhost")
@app.task
def add(x, y):
	return x+y
2、运行程序:celery -A tasks worker --loglevel=info
3、查看命令行参数列表:celery worker --help
celery help
4、用delay()方法调用任务:
from tasks import add
add.delay(1,2)
5、将redis同时作为结果后端(发送状态消息)和消息中间人:
app=Celery("tasks", backend="redis://localhost", broker="redis://localhost")
6、使用配置模块,可以通过result_backend设置:
result_backend=“redis://:password@hostname:port/db_number”
7、配置好结果后端,再次调用任务,调用任务后返回AsyncResult实例。
result = add.delay(1, 2)
result.ready()	#查看任务是否完成处理
result.get(timeout=1)	#你可以等待任务完成,但这很少使用,因为它把异步调用变成了同步调用
8、倘若任务抛出了一个异常, get() 会重新抛出异常, 但你可以指定 propagate 参数来覆盖这一行为:
result.get(propagate=False)
9、任务抛出异常时,获取原始回溯信息:result.traceback
10、配置序列化荷载的默认序列化方式:app.conf.task_serializer="json"
11、用update一次性设置多个选项:
app.conf.update(
	task_serializer = 'json',
	accept_content = ['json'],
	result_serializer = 'json',
	timezone = 'Europe/Oslo',
	enable_utc = True,
)
12、celery实例加载配置模块:app.config_from_object('celeryconfig')	#对应celeryconfig.py模块,必须在统一路径下
celeryconfig.py:

broker_url = 'redis://'
result_backend = 'redis://'

task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']
timezone = 'Europe/Oslo'
enable_utc = True
13、验证配置文件是否正确:python -m celeryconfig
14、将“脏活”路由到专用队列:task_routes = {'tasks.add':'low-proprity'}
15、对任务进行速率限制:task_annotations = {"tasks.add":{'rate_limit':'10/m'}}	#每分10个
16、在职程上设置:celery control rate_limit tasks.add 10/m
17、结果后端未奏效或处于pending(待处理)状态的可能原因:

 - 启用了ignore_result选项,强制职程跳过状态更新。
 - 启用了task_ignore_result设置
 - 确保没有仍在运行的旧职程:–pidfile 参数可以设置为一个绝对路径来避免该状况。
 - 确保客户端配置了正确的结果后端
>>> result = task.delay(…)
>>> print(result.backend)

猜你喜欢

转载自blog.csdn.net/luhu124541/article/details/88544410
今日推荐