python-celery学习笔记

用python-celery实现重试机制。

项目中需要异步执行某个任务,且失败的时候需要重试,且需要知道是否执行成功,可以这样设计。
案例代码如下:

@task()
def test_task(*args,**kwargs):
	#处理逻辑
    return True
def home(request):
    from celery_tasks import test_task
    rep = test_task.apply_async((2, 'a'), retry=True, retry_policy={
        'max_retries': 3,
        'interval_start': 0,
        'interval_step': 0.2,
        'interval_max': 0.2,
    })
    try:
        print (rep.get())
    except Exception as e:
        print ('添加报错信息' + str(e)

用apply_async进行异步操作,
retry:表示是否执行。
retry_policy={
‘max_retries’: 3, #表示重试3次
‘interval_start’: 0,#表示失败后到第一次重试时的时间间隔(即什么时候第一次重试)
‘interval_step’: 0.2, #表示 每次重试之间的时间间隔
‘interval_max’: 0.2, #表示 每次重试时,时间间隔
})
rep.get() #这个是一个阻塞函数,等异步任务执行结束的时候获取异步任务函数的返回值。
当然,这样设计,个人觉得不合理,直接放在业务中阻塞的话,十分不友好。如果加上等待时间的话,阻塞时间更久。 可以增加个中间者转发。这样就避免的用户在阻塞等待了,还可以增加定时功能,修改的代码如下。

@task()
def mid_task(*args,**kwargs):
	#处理逻辑
	from celery_tasks import test_task
    rep = test_task.apply_async((2, 'a'),countdown=100, retry=True, retry_policy={
        'max_retries': 3,
        'interval_start': 0,
        'interval_step': 0.2,
        'interval_max': 0.2,
    })
  	try:
        print (rep.get())
    except Exception as e:
        print ('添加报错信息' + str(e)
def home(request):
    from celery_tasks import mid_task
    mid_task.apply_async((2, 'a'), countdown=100)
    return response
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值