Tornado 的实现还是很强大的

这段时间自己把iostream.py实现了一下,顺便给socket打了个补丁,发现了好几个有趣的点:

1. socket的C实现中,对于recv函数,直接返回新生成的字符串比传入缓冲区写还要快。

大概能快10%。代码稍候附上,大家可以自由cProfile (./python -m cProfile yourcode.py)。

2. Python的速度大大逊于原生代码。

用cProfile做了些调优后的感想。不过大家用Python都是冲着顺手易用去的,所以这一点倒也无可厚非。

3. Python的List(含string)操作是高度优化过的。

我曾经试图用自己管理的bytearray缓冲区来替代原生的string,因为源代码里面包括了大量的+=和区段赋值操作,以提高性能。
但是我错了,而且错的很离谱。
现在的bytearray1[x:length] = bytearray2[y:length]操作和我自己写的
memcpy(bytearray2, y, bytearray1, x, length)几乎一样快。
而且如果是反复调用string_a += random_string_b,并不会每次重新分配内存并做拷贝操作,和预先分配一块内存做搬运基本一样
快。

4. 函数调用在Python里面的开销是不小的。对于较为关键的代码,建议手工inline。当然如果对性能要求再高建议直接C.

5. 用 not not collection_var 来代替 len(collection_var) > 0 的判断语句。

6. 对于deque,访问deque.popleft,然后根据判断再deque.appendleft,比直接deque[0]要快。

总之,Tornado的实现考虑到了以上中的大部及重点,如1和3. 它的实现蛮强大,大家放心使用。。。

---

作者:jacky.chao.wang#gmail.com,来自 python-cn 邮件列表,原文标题:Tornado的实现还是很强大的

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。