8
回答
php client调用python server耗时太长
终于搞明白,存储TCO原来是这样算的>>>   

@andot 你好,想跟你请教个问题:

现在用php客户端调用python的同步server大概要耗时2s,而整个过程会耗时2.6s左右
使用的http://127.0.0.1:8181,传入的参数只有一个字符串,大概有40k左右,而python那边真正执行也只耗时0.5s不到,传输效率有点低啊
我刚刚测试了下,用您以前写的phprpc调用,整个过程不到0.6s

举报
傻傻
发帖于11个月前 8回/575阅

引用来自“andot”的评论

原来是这样,py自带的那个wsgi服务器仅用于调试,因为支持wsgi的服务器有很多,所以通常情况下,直接使用HproseHttpService这个类作为服务就可以了(它是个标准的WSGI app),那个HproseHttpServer 仅用于在没有安装 WSGI 服务器的情况下作为开发调试使用。这部分内容,在文档里写过。

了解了,多谢耐心的解答,我是从git上下载的,然后直接照着你example里面的例子就开发了。顺便问一句,什么时候python-hprose可以加入对tcp、web socket这些特性的支持呢,还是蛮期待的

原来是这样,py自带的那个wsgi服务器仅用于调试,因为支持wsgi的服务器有很多,所以通常情况下,直接使用HproseHttpService这个类作为服务就可以了(它是个标准的WSGI app),那个HproseHttpServer 仅用于在没有安装 WSGI 服务器的情况下作为开发调试使用。这部分内容,在文档里写过。

引用来自“wei2011”的评论

用什么http server运行的,改用gunicorn之类的运行试试
谢谢哥们给我的思路,我看了@andot实现的源码,用gevent的WSGIServer,重新继承了HproseHttpService,整个过程0.63s,已经基本接近自己写的python服务的运行时间了

引用来自“andot”的评论

看你的描述,也不是数据解析速度慢的问题。难道是 DNS 解析时间慢?这个我也搞不清楚了。

我追了下你的源码,打印了一些debug信息看了下
php传输到python很快,pretransfer_time也才0.000266,但是到python里之后,httpserver.py里handle方法中,data = environ['wsgi.input'].read(int(environ.get("CONTENT_LENGTH", 0)))这条语句要耗时1s,然后body = self._handle(data, environ)也要耗时1s,瓶颈应该是在这

这样的话,你试试传输时,在 PHP 端使用 $bytes = new BytesIO($str),之后来传输 $bytes,应该可以提高速度。

--- 共有 2 条评论 ---
傻傻对了,我的curl版本是7.19.7 11个月前 回复
傻傻是调用的时候直接$bytes = new BytesIO($str),然后将$bytes当做参数调用python是吧? 我刚刚试了,好像也没有用,我用pecl扩展里面的HproseBytesIO,能减少一定的时间,大概0.2s左右,但是时间还是很长 我看new BytesIO前后两种调用方式,python端打印出的数据长度是一样的 我感觉是不是跟php的curl调用有关? 11个月前 回复

问题不在于 python 服务器,你可以在 php 客户端安装上 hprose 的 pecl 扩展。这样就可以高效的传输字符串了。

--- 共有 1 条评论 ---
傻傻我这个结果就是在安装了pecl扩展后得到的,我把so扩展去除后,二者的时间基本一样 11个月前 回复
顶部