最近写了个脚本,多进程利用pycurl给一个PAAS平台发送数据,刚开始的一段时间很正常,后期时不时会蹦出一些错误消息,在屏幕上一刷而过,google一看好多人都遇过这样的问题,不过都是在使用git时遇到的,不过和导致我遇到问题的原因是一样的。pycurl使用的ssl库是GnuTLS,GnuTLS有时候会造成封包长度异常。程序运行环境是ubuntu12.04。
解决方法很简单:
1 不使用http,而且效率还高,不走ssl加密过程,可惜上头不同意。
2 自己编译使用openssl版本的pycurl。
1 查看你的pycurl使用的那个ssl库
2 创建一个编译目录pycurl_make,安装编译环境,前提是先把你的老版本pycurl及GnuTLS库卸载掉。
apt-get install build-essential fakeroot dpkg-dev
3 进入该目录进行编译
#
cd pycurl_make
#
apt-get source python-pycurl
#
apt-get build-dep python-pycurl
#
apt-get install libcurl4-openssl-dev
#
dpkg-source -x pycurl_7.19.0-4ubuntu3.dsc
#
cd pycurl-7.19.0/
#
sed -i 's/libcurl4-gnutls-dev/libcurl4-openssl-dev/g' debian/control
#
dpkg-buildpackage -rfakeroot -b
#
dpkg -i ../python-pycurl_7.19.0-4ubuntu3_amd64.deb
4 查看新编译的pycurl使用的ssl库