我在編譯程序時真的很糟糕,我只想知道如果我使用py2exe將它轉換爲.exe,我的python 2.5程序會更快。我不想花很多時間試圖編譯它,如果它最終會變得更慢。我的程序使用OpenCV和PyAudio,但我認爲這是它使用的唯一非純Python模塊。謝謝!使用py2exe將python腳本轉換爲.exe時速度更快嗎?
注:我不認爲這個問題需要一個代碼snippit,但如果它的確如此,請在評論中這樣說。謝謝!
我在編譯程序時真的很糟糕,我只想知道如果我使用py2exe將它轉換爲.exe,我的python 2.5程序會更快。我不想花很多時間試圖編譯它,如果它最終會變得更慢。我的程序使用OpenCV和PyAudio,但我認爲這是它使用的唯一非純Python模塊。謝謝!使用py2exe將python腳本轉換爲.exe時速度更快嗎?
注:我不認爲這個問題需要一個代碼snippit,但如果它的確如此,請在評論中這樣說。謝謝!
不,不是真的。由於它僅僅是一個包裝器,它提供了運行代碼所需的必要文件。使用用Cython可以使你的程序運行速度更快,通過能夠如果你想使你的程序更快使用C.
你可以給我一個下載鏈接來使用Cython編譯它嗎?我一直在尋找這樣的東西很長一段時間! –
請注意,應用於未修改的Python代碼的Cython只會提供最低限度的加速,因爲除了刪除字節碼調度開銷之外,它將無法做更多的事情。幾乎所有生成的C代碼仍然會使用CPython運行時,動態類型化,使用運行時類型檢查,對盒裝堆分配對象進行操作,具有GC開銷等 - 要獲得更高效的代碼,必須使用Cython特有的語法來擺脫這些(以犧牲活力和可移植性爲代價)。 – delnan
大多數你將需要的所有python庫: http://www.lfd.uci.edu/~gohlke/pythonlibs/ 此外,你應該看看Numba。它和Cython很相似,但它也更容易使用。看看這個博客「http://jakevdp.github.com/blog/2012/08/24/numba-vs-cython/」瞭解更多詳情。使用Numba,一個函數上的單線裝飾器可以提供比原生python快1000倍的速度(但是Cython速度稍快)。 –
編譯它,你首先要衡量爲什麼它是緩慢的。這意味着找出其中該程序正在花費時間。使用其中一個可用的profilers。從鏈接的例子中可以看出,這並不困難。
如果您知道程序花費大部分時間在哪裏,您可以決定是否值得或甚至可能進行優化。如果您的程序是例如已經飽和了你的網絡連接,修補程序不會讓它變得更快。
如果您將程序中最慢的代碼添加到您的問題中,也許我們可以幫助您改進它。通常可以通過改進您使用的算法來獲得巨大收益。例如,如果你的代碼在一長串數據上做了相同的計算,通常很容易用例如multiprocessing.Pool。如果你有一個N核CPU,Pool.map()
可以比常規的map()
快達N倍。
如果那還不夠,很多標準的python代碼都可以運行在pypy的實現上,一般來說faster比cpython的實現。
除了已經提到的cython之外,你還可以使用一個現有的C語言擴展,如用於數值計算的numpy。另一種選擇當然是在C中編寫專用擴展。
您的操作系統也很重要。 It seems XP上的python在文件訪問上的速度比例如在Linux上。
那麼,我的程序捕獲許多屏幕圖像並將它們保存到文件。現在,它使用wx捕獲圖像,並將它們保存到線程中的文件中。 –
XP具有捕捉屏幕截圖的功能。您可以直接使用這些(使用ctypes)而不是通過wx。請參閱:http://stackoverflow.com/questions/531684/what-is-the-best-way-to-take-screenshots-of-a-window-with-c-in-windows如果這仍然太慢,你可以使用多個進程來完成它。 –
我花了2個月的時間研究Windows Python,我必須說我不是很高興。 如果你有任何C模塊(除了標準庫),你會遇到很大的問題,以使其工作。
速度與Linux類似,但似乎有點慢。 請注意,py2exe不是最好的。 我有py2exe的問題,不得不使用pyinstaller。 它有一個更好的調試,它的情況下工作時,py2exe沒有
我最大的心懷不滿是exe文件的大小,我做了一個簡單的程序,使用LXML,泡沫,這是7-8mb大...
這將取決於你的Python程序到底做了什麼,只能通過實際測試兩個並行來回答。由於這裏沒有人可以爲你做這件事,所以很難回答這個問題。 –
沒有'神奇的子彈'。你不能只是簡單地做一些事情,讓代碼更快。你必須明白它在做什麼,爲什麼它需要很長時間,並想辦法解決這個問題。 – katrielalex