fcgi.py 从python2.x到3.x的移植

      python推出3.x版本已经有很长一段时间了,许多第三方模块却都还没有开始完全支持3.x版本。一直奇怪为什么第三方py模块的更新速度这么慢,今天我终于真正体会了一把。

出于对py标准化组织的信任,我决定以后做事情都用python3来搞,因此在做一个web框架时,考虑到从fastcgi+ngnix来搭建。但是      django使用的fcgi.py文件并不支持python3.x。没办法,决定自己移植。

      由于fcgi.py文件并不大,因此早晨的时候踌躇满志,以为能够三下五除二将移植工作搞定。调整了几个小的地方,如函数的新名字、变更后的所属模块后,运行python fcgi.py,程序能够正常运行。但是就是无法获得ngnix甩过来的流量,后来通过跟踪源码,发现是py3.x中str和bytes两种数据类型要求更严格所产生的异常导致,做了显示转换后,问题解决。fcgi.py能够获得流量了,但是新的问题出来了,网页送过来的客户端信息数据被粘连在一块,没有被fcgi正确解析,这个问题很好定位,ngnix通过socket方式将客户端参数组包后send给fcgi,fcgi在解析这些信息时,用struct模块的unpack函数进行解析,但是由于unpack函数中str、bytes以及字符长度等问题的交叉缠绕,这种大调整正是python3.x显著不同于python2.x的地方,此类问题集中在fcgi.py的decode_pair函数中,重写了这个函数后,问题解决。

     至此,移植过程结束,算下来,花去了我13个小时的时间。收获就是,对ngnix+fastcgi的原理有了一些了解。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值