当连接失败,Celery会自动重试发送消息,我们可以对重试行为进行设置,譬如说多久重试一次、最大重试次数或者干脆不重试!
当然这只是官方文档说的,我在Windows上进行测试,故意设置了局域网中没有使用的ip地址作为broker的地址,本来以为会像文档中讲的那样,在重试3次后返回并提示错误,结果死活不返回;查看配置文档,找了各种配置项进行修改,都是这样,后来在Linux下面运行就正常了!感觉Celery在Windows下运行真的好多坑啊!
from celery import Celery
app = Celery('tasks',
backend='amqp://agent:agent@*.*.*.*:5672',
broker='amqp://agent:agent@*.*.*.*:5672')
app.conf.update(broker_connection_timeout=4.0, broker_connection_max_retries=3)
@app.task
def add(x, y):
return x + y
if __name__ == '__main__':
add.apply_async((2, 3), retry=True, retry_policy={
'max_retries': 3,
'interval_start': 0,
'interval_step': 0.2,
'interval_max': 0.2,
})
通过快捷键退出程序后,可以看到如下输出,明显是阻塞在和broker的tcp连接上了,而且超时时间肯定巨长或者是无限等待
callback)
File "E:\Python34\lib\site-packages\kombu\utils\functional.py", line 333, in
etry_over_time
return fun(*args, **kwargs)
File "E:\Python34\lib\site-packages\kombu\connection.py", line 261, in connec
return self.connection
File "E:\Python34\lib\site-packages\kombu\connection.py", line 802, in connec
ion
self._connection = self._establish_connection()
File "E:\Python34\lib\site-packages\kombu\connection.py", line 757, in _estab
ish_connection
conn = self.transport.establish_connection()
File "E:\Python34\lib\site-packages\kombu\transport\pyamqp.py", line 130, in
stablish_connection
conn.connect()
File "E:\Python34\lib\site-packages\amqp\connection.py", line 282, in connect
self.transport.connect()
File "E:\Python34\lib\site-packages\amqp\transport.py", line 109, in connect
self._connect(self.host, self.port, self.connect_timeout)
File "E:\Python34\lib\site-packages\amqp\transport.py", line 150, in _connect
self.sock.connect(sa)
KeyboardInterrupt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)