开发基于celery框架的定时任务发布系统时,环境配置出了不少问题,写一下最坑的一点:
安装环境:centos7 + python2.7 + mysql5.6 + redis? + tornado4.3 + celery3.1 等
需要安装tornado-celery,但是python2.7没有默认的pika包导致tornado-celery运行报错。
安装pika包
运行tornado报错,报错原因是:中stop_ioloop_on_close这个参数unexpected。
打断点跟了下bug,发现这段代码:
路径:python所在环境/site-packages/tcelery/connection.py中的Connection().connect方法中这段:
try:
TornadoConnection(params, stop_ioloop_on_close=False,
on_open_callback=partial(self.on_connect, callback),
custom_ioloop=self.io_loop)
except AMQPConnectionError:
logging.info('Retrying to connect in 2 seconds')
其所调用的模块是 python所在环境/site-packages/pika/adapters/tornado_connection.py中的模块。但是该模块的相应方法并没有stop_ioloop_on_close参数。
原因是我安装的pika没有指定版本,默认的最高版本在这里有改动。
解决:
pip uninstall pika
pip install pika==0.9.14
0.9.14版本是可用的,其他版本可能也可以,我没有试过