深度学习和rabbitmq线上问题实录
问题
flask face worker 监听rabbitmq 队列,对数据进行AI处理,
由于处理每条消息耗时较长,pika 连接mq 总是超时被server端断开连接
解决思路
由于频繁处理任务,所以用的是长连接,查阅资料,说是设置heartbeat=0,关闭客户端和server的心跳连接机制(官方不建议),结果设置这个还是不行,就想着把heartbeat 的值改为三个小时,如果一个任务处理超过三个小时就完蛋,
创建连接之后,开一个子线程,每隔几秒去和server端保持一次心跳,不让server端主动断开连接,然后主线程去执行任务。
遇到的BUG
每次收到任务之后,开一个子线程去执行任务,主线程保持心跳,维持连接,
这样理论是可以的,实现之后也可以消费,face模型跑一段时间之后(随机的时间)
,就卡在某个函数不动了,既不报错也不退出,非常尴尬,经过分析,猜测是因为出现了死锁,只能另寻解决方法,见上。
总结
深度学习的框架尽量不用多线程去跑,有可能是开多线程之后,某些网络卡住了,就会非常难排查和解决。