我期待爲現有應用程序帶來速度改進,並且正在尋找關於我的可能選項的建議。該應用程序是用Python編寫的,使用wxPython,並與py2exe
(我只針對Windows平臺)打包在一起。應用程序的一部分計算量很大,並且在解釋的Python中運行得太慢。我對C不熟悉,因此移植部分代碼對我來說不是一個真正的選擇。使用PyPy或Shedskin加速現有Python應用程序的某些部分
所以我的問題基本上是我有一個清晰的圖片我的選擇,我下面概述,或者我是從一個錯誤的方向接近?
- 與pypy運行:今天,我開始與Pypy實驗 - 結果是令人興奮的,因爲我可以從pypy解釋器中運行該代碼的大部分地區,我看到5倍+速度的提高,沒有更改代碼。但是,如果我理解正確,(a)支持wxpython的Pypy是still a work in progress,並且(b)I cannot compile it down to an exe for distribution anyway。所以,除非我錯了,這對我來說似乎是不可行的?沒有辦法打包東西,所以它的一部分是用pypy來執行的?
- 將代碼轉換爲RPython,翻譯爲pypy因此,下一個選項似乎實際上是將部分代碼重寫爲pypy限制語言,這似乎是一個相當大的工作。但是,如果我這樣做,部分代碼可以編譯爲可執行文件(?),然後通過ctypes(?)訪問代碼。
- 其他受限制選項棚子似乎是一個受歡迎的替代品,這是否符合我的要求更好?其他選項似乎是Cpython,Psyco和Unladen,但它們都被取代或不再維護。
非常感謝,我接受了你的回答。然而,在與Cython打了一個非常高效的下午之後,我想我已經遇到了一個無法克服的問題:Cython缺乏線程支持。我之前在線程中運行並且沒有鎖定GUI的計算昂貴的計算現在凍結了所有內容。 從谷歌搜索,似乎這是設計;獲得並行性(http://docs.cython.org/src/userguide/parallelism.html#parallel)是釋放GIL,並且GIL中的所有代碼都不能使用任何本地python對象,我是否正確理解這一點?這會讓Cython不好。 – misshapen
@NickJ(1)我不知道Cython是否支持Python線程 - 但我不明白爲什麼它不能。也許你鏈接到的替代品只是*首選*,因爲它可以使用多個CPU。 (2)我不確定這是否是你的拼寫錯誤,但受GIL *保護的代碼將能夠使用Python類型,而「nogil」部分不能(因爲CPython以及所有Python類型依賴於GIL)。 (3)除此之外,您可以在Cython中不使用「線程化」,將任何想要並行化的東西放入相對純的Cython函數中,並通過Python啓動線程。 – delnan