AysncResult类的函数
r = xxx.delay()
返回的对象 r 是AsyncResult的实例
ready()
查看任务状态,返回布尔值,任务执行完成,返回True,否则返回False
wait()
等待任务完成,返回任务执行结果,很少使用
get(timeout=1)
获取任务的执行结果,可以设置等待时间
result属性
任务的执行结果
r.state r.status
PENDING,START,SUCCESS,任务的当前状态
successful
任务成功返回True
traceback
如果任务抛出了一个异常,可以获取原始的回溯信息
celery的装饰函数task
from celery import task
@task()
def xxx():
pass
task()
可以将任务装饰为异步。
参数:
<b>name</b>:可以显示指定任务的名字
<b>serializer</b>:指定序列化的方法
<b>bind</b>:一个bool值,设置是否绑定一个task的实例,如果绑定,task会作为参数传递到函数中,可以访问到task实例的所有属性
@task(bind=True)
def add(self, x, y): # self就是task的实例。
print(self.request.id)
<base>:定义任务的基类,可以用来定义回调函数
import celery
class MyTask(celery.Task):
def on_failure(self, exc, task_id, args, kwargs, einfo):
"""
任务失败时执行
"""
def on_success(self, retval, task_id, args, kwargs):
"""
任务成功时执行
"""
def on_retry(self, exc, task_id, args, kwargs, einfo):
"""
任务重试时执行
"""
@celery.task(base=MyTask)
def div(x, y=0):
return x / y
参数介绍:
<b>exc</b>:失败时的错误类型
<b>task_id</b>:任务的id
<b>args</b>:任务函数的参数
<b>kwargs</b>:关键字参数
<b>einfo</b>:失败时的异常详细信息
<b>retval</b>:任务成功执行的返回值
调用异步任务的函数:
xxx.delay()
是apply_async的快捷函数,接收的参数较为简单
xxx.apply_async(args=[], kwargs={})
使用被app.task装饰的函数调用后,可以传入详细的参数。
send_task()
from celery import Celery
app = Celery()
app.send_task()
可以发送未被注册的异步任务,也就是没有被celery.task装饰的函数
app.send_task('task.add',args=[3,4])
参数基本和apply_async一样,但是send_task在发送时不会检查函数(task.add)是否存在,即使为空也会发送成功。
apply_async() | send_task()的函数:
<b>countdown</b>:设置该任务等待一段时间后再执行,单位为s
<b>eta</b>:定义任务开始的时间,eta = time.time() + 10
<b>expires</b>:设置任务时间,如果在任务时间内没有完成就抛弃
<b>retry</b>:如果任务失败后,是否重试,默认是True
<b>shadow</b>:重新指定任务的名字,覆盖在日志中的使用的名称
<b>try_policy</b>:重试策略
- max_retries:最大重试数,默认为3
- interval_start:重试等待的时间间隔秒数,默认是0,表示直接重试不等待
- interval_step:每次重试让重试间隔增加的秒数,可以是浮点数,默认是0.2
- interval_max:重试间隔最大的秒数,即step增加到多大后就不再增加了,默认是0.2
add.apply_async((2, 2), retry=True, retry_policy={
'max_retries': 3,
'interval_start': 0,
'interval_step': 0.2,
'interval_max': 0.2,
})
<b>routing_key</b>:自定义路由键
<b>queue</b>:指定发送到哪个队列
<b>exchange</b>:指定发送到哪个交换机
<b>priority</b>:任务队列的优先级,0-9之间
<b>serializer</b>:任务序列化方法,通常不需要设置
<b>compression</b>:压缩方案,有zlib,bzip2等
<b>headers</b>:为任务添加额外的消息
<b>link</b>:任务成功执行后的回调函数,是一个signature对象,可以用来关联任务
<b>link_error</b>:任务失败后的回调函数
参考:
https://www.cnblogs.com/cwp-bg/p/8759638.html
网友评论