前言:
python下的celery是啥东西大家应该有了解,是一个异步的任务框架 。话说, 我以前写过一个报警平台的项目,也需要任务的扩展成分布式,当时总是觉得 用celery不是那么太靠谱,所以就自己写了一个分布式的任务派发的系统。
今个和朋友聊起了分布式爬虫,这哥们说 任务有时候经常的崩溃,但是celery的retry的机制有些意思,最后看了下文档 ,又研究了下retry的参数,然后把自己的一些实战分享给大家。
- #xiaorui.cc
- @celery.task(bind=True,max_retries=3,default_retry_delay=1 * 6)
- def sum(self, num):
- try:
- f = open('plog','a')
- f.write('retryn')
- f.close()
- num = num + 1
- return num
- except Exception as exc:
- raise self.retry(exc=exc, countdown=60)
其实最主要就那几个参数,官网写的也很干练,上来就给个例子。 呵呵 ~
bind=True 是开启
max_retries 是重新尝试的此时
default_retry_delay 是默认的间隔时间,尝试的时间
下面的代码,大家应该懂的。 就是捕捉异常。
countdown 也是时间,这个时间优先级是大于上面的default_retry_delay的。
这个时候我是可以看到,我刚才设置的,碰到异常之后,重新执行三遍的。
注意下,这个异常是我自己特意抛出去的,不懂的看上面的py。 还有一点是celery 自己会sleep 时间。 我定义了60s 。
- redis 127.0.0.1:6379> lrange celery 0 -1
- 1) "{"body": "gAJ9cQEoVQdleHBpcmVzcQJOVQN1dGNxA4hVBGFyZ3NxBFUEaXAgYXEFhXEGVQVjaG9yZHEHTlUJY2FsbGJhY2tzcQhOVQhlcnJiYWNrc3EJTlUHdGFza3NldHEKTlUCaWRxC1UkYTZkMTJkZTMtYjUzOC00ZjMxLWFiNzMtNjExNTQwYjY5NmZkcQxVB3JldHJpZXNxDUsDVQR0YXNrcQ5VCXRhc2tzLnN1bXEPVQl0aW1lbGltaXRxEE5OhnERVQNldGFxElUgMjAxNC0wOS0wMlQxMjoxMjozOC4wNDE4OTYrMDA6MDBxE1UGa3dhcmdzcRR9cRV1Lg==", "headers": {"redelivered": true}, "content-type": "application/x-python-serialize", "properties": {"body_encoding": "base64", "delivery_info": {"priority": 0, "routing_key": "celery", "exchange": "celery"}, "delivery_mode": 2, "correlation_id": "a6d12de3-b538-4f31-ab73-611540b696fd", "reply_to": "4459d9e6-2cff-35c9-be5b-45a2d976911e", "delivery_tag": "bd4480dd-d04a-4401-876b-831b30b55f4e"}, "content-encoding": "binary"}"
- 2) "{"body": "gAJ9cQEoVQdleHBpcmVzcQJOVQN1dGNxA4hVBGFyZ3NxBFUEaXAgYXEFhXEGVQVjaG9yZHEHTlUJY2FsbGJhY2tzcQhOVQhlcnJiYWNrc3EJTlUHdGFza3NldHEKTlUCaWRxC1UkNDczMzFhYTgtNzZhOC00N2E1LTg1MGItNzZkYTY0YjY2YzM1cQxVB3JldHJpZXNxDUsBVQR0YXNrcQ5VCXRhc2tzLnN1bXEPVQl0aW1lbGltaXRxEE5OhnERVQNldGFxElUgMjAxNC0wOS0wMlQxMjoxMjo1NS40NjA0MzArMDA6MDBxE1UGa3dhcmdzcRR9cRV1Lg==", "headers": {"redelivered": true}, "content-type": "application/x-python-serialize", "properties": {"body_encoding": "base64", "delivery_info": {"priority": 0, "routing_key": "celery", "exchange": "celery"}, "delivery_mode": 2, "correlation_id": "47331aa8-76a8-47a5-850b-76da64b66c35", "reply_to": "4459d9e6-2cff-35c9-be5b-45a2d976911e", "delivery_tag": "9fa3c120-0bfd-4453-9539-1465e6e820ff"}, "content-encoding": "binary"}"
- redis 127.0.0.1:6379>
来源: http://it.taocms.org/09/5461.htm