鍍金池/ 教程/ Python/ 利用 pypy 提高 python 腳本的執(zhí)行速度及測試性能
通過 memcached 實現(xiàn)領(lǐng)號排隊功能及 python 隊列實例
利用 pypy 提高 python 腳本的執(zhí)行速度及測試性能
Python FAQ3-python 中 的原始(raw)字符串
Mongodb 千萬級數(shù)據(jù)在 python 下的綜合壓力測試及應(yīng)用探討
Parallel Python 實現(xiàn)程序的并行多 cpu 多核利用【pp 模塊】
python simplejson 模塊淺談
服務(wù)端 socket 開發(fā)之多線程和 gevent 框架并發(fā)測試[python 語言]
python Howto 之 logging 模塊
python 之 MySQLdb 庫的使用
關(guān)于 python 調(diào)用 zabbix api 接口的自動化實例 [結(jié)合 saltstack]
python 之利用 PIL 庫實現(xiàn)頁面的圖片驗證碼及縮略圖
Python 通過 amqp 消息隊列協(xié)議中的 Qpid 實現(xiàn)數(shù)據(jù)通信
python 中用 string.maketrans 和 translate 巧妙替換字符串
python linecache 模塊讀取文件用法詳解
Python 批量更新 nginx 配置文件
python 計算文件的行數(shù)和讀取某一行內(nèi)容的實現(xiàn)方法
python+Django 實現(xiàn) Nagios 自動化添加監(jiān)控項目
多套方案來提高 python web 框架的并發(fā)處理能力
python 寫報警程序中的聲音實現(xiàn) winsound
python 調(diào)用 zabbix 的 api 接口添加主機、查詢組、主機、模板
對 Python-memcache 分布式散列和調(diào)用的實現(xiàn)
使用 python 構(gòu)建基于 hadoop 的 mapreduce 日志分析平臺
一個腳本講述 python 語言的基礎(chǔ)規(guī)范,適合初學(xué)者
Python 編寫的 socket 服務(wù)器和客戶端
如何將 Mac OS X10.9 下的 Python2.7 升級到最新的 Python3.3
python 監(jiān)控文件或目錄變化
報警監(jiān)控平臺擴展功能 url 回調(diào)的設(shè)計及應(yīng)用 [python 語言]
Python 處理 cassandra 升級后的回滾腳本
python 實現(xiàn) select 和 epoll 模型 socket 網(wǎng)絡(luò)編程
關(guān)于 B+tree (附 python 模擬代碼)
通過 python 和 websocket 構(gòu)建實時通信系統(tǒng)[擴展 saltstack 監(jiān)控]

利用 pypy 提高 python 腳本的執(zhí)行速度及測試性能

啥是 pypy

簡單地說, PyPy 是用 Python 語言寫了一個工具, 將 Python 代碼成 C, .NET, Java 等語言和平臺的代碼. PHP 也有類似的項目 – HipHop-PHP, 把 PHP 代碼轉(zhuǎn)成 C++ 代碼.

為什么要將一種語言轉(zhuǎn)成另一種語言? 首先是目標(biāo)語言可能在性能(如 C 語言)和/或跨平臺(如 .NET, Java)等方面具有優(yōu)勢. 其次, 在轉(zhuǎn)換的過程, 可以進行代碼優(yōu)化或加入新技術(shù), 比如 PyPy 應(yīng)用的 Just-in-Time(JIT) 技術(shù), 能讓 Python (事實上是轉(zhuǎn)換后的目標(biāo)代碼)的執(zhí)行速度更快.

反正是性能很好的東西,但是也有不少的局限性。

咱們就不用源碼安裝了,最新的版本是 2.2.1,但是看老外那邊用 2.0 的還是比較的多。 有需要的朋友可以下載 2.2.1

地址:http://pypy.org/download.html

http://wiki.jikexueyuan.com/project/python-actual-combat/images/68.jpg" alt="pic" />

簡單的跑一下:

import time
#xiaorui.cc
#rfyiamcool@163.com
def test(n,m):
    m=m
    vals = []
    keys = []
    for i in xrange(m):
        vals.append(i)
        keys.append('a%s'%i)
    d = None
    for i in xrange(n):
        d = dict(zip(keys, vals))
    return d
if __name__ == '__main__':
    st = time.time()
    print test(1000000,100)
    print 'use:', time.time() - st

看看 pypy 和純 python 執(zhí)行的效率比較!

發(fā)現(xiàn)一個小規(guī)律,在小數(shù)據(jù)的時候,貌似 pypy 比率很大,但是運算多了后,貌似結(jié)果差距不算大。

http://wiki.jikexueyuan.com/project/python-actual-combat/images/69.jpg" alt="pic" />

這是用純 python 執(zhí)行的結(jié)果。

http://wiki.jikexueyuan.com/project/python-actual-combat/images/70.jpg" alt="pic" />

import time
from time import clock
#xiaorui.cc
def check(num):
    a = list(str(num))
    b = a[::-1]
    if a == b:
        return True
    return False

def main():
    all = range(1,10**7)
    for i in all:
        if check(i):
            if check(i**2):
                print(i,i**2)

if __name__ == '__main__':
    start = clock()
    main()
    end = clock()
    print (end-start)

http://wiki.jikexueyuan.com/project/python-actual-combat/images/71.jpg" alt="pic" />

結(jié)果打出來是這樣的 ~

root@YZSJHL1-131:~$python g2.py
(1, 1)
(2, 4)
(3, 9)
(11, 121)
(22, 484)
(101, 10201)
(111, 12321)
(121, 14641)
(202, 40804)
(212, 44944)
(1001, 1002001)
(1111, 1234321)
(2002, 4008004)
(10001, 100020001)
(10101, 102030201)
(10201, 104060401)
(11011, 121242121)
(11111, 123454321)
(11211, 125686521)
(20002, 400080004)
(20102, 404090404)
(100001, 10000200001)
(101101, 10221412201)
(110011, 12102420121)
(111111, 12345654321)
(200002, 40000800004)
(1000001, 1000002000001)
(1001001, 1002003002001)
(1002001, 1004006004001)
(1010101, 1020304030201)
(1011101, 1022325232201)
(1012101, 1024348434201)
(1100011, 1210024200121)
(1101011, 1212225222121)
(1102011, 1214428244121)
(1110111, 1232346432321)
(1111111, 1234567654321)
(2000002, 4000008000004)
(2001002, 4004009004004)

不知道是不是服務(wù)器的性能不夠高,找了臺所謂高性能的服務(wù)器再跑跑: (公司剛買了一堆的華為服務(wù)器,挺好奇的,華為居然也出服務(wù)器了,找了臺沒上線的服務(wù)器測試下)

我暈,真垃圾的呀!看來這個機型適合做雜七雜八的業(yè)務(wù)的機型 !

python 的因為是單核跑的,所以和 cpu 的主頻有關(guān)聯(lián)的!

http://wiki.jikexueyuan.com/project/python-actual-combat/images/72.png" alt="pic" />

有老外說 gevent 和 pypy 可以更好的提高效率,在 pypy 層次下也可以調(diào)用協(xié)程。等有結(jié)果在分享給大家!

pypy 對我來說,最大的缺點就是他的庫支持的還是少,尤其是 socket 級別的包,不少的 bug。 就算是最廣泛的 Django 也是存在兼容的!

root@YZSJHL1-131:~$pypy myapp.py
Traceback (most recent call last):
  File "app_main.py", line 72, in run_toplevel
  File "myapp.py", line 2, in <module>
    from flask import Flask
ImportError: No module named flask
root@YZSJHL1-131:~$

好,先說到這里 !

本文出自 “峰云,就她了。” 博客,謝絕轉(zhuǎn)載!