一千萬個為什麽

搜索

我需要加快功能。我應該使用cython,ctypes還是其他什麽?


通過編寫基因編程類型的應用程序,我學習Python很有趣。

我在本網站上得到了Torsten Marek,Paul Hankin和Alex Martelli的一些很好的建議。

該計劃有4個主要功能:

  • 生成(隨機)表達式樹。
  • 評估樹的適應性
  • 雜交
  • 突變

因為所有生成,雜交和變異調用'評估適應性'。它是最繁忙的功能,是速度上的主要瓶頸。

正如遺傳算法的本質一樣,它必須搜索一個巨大的解空間,以便越快越好。我想加快這些功能。我將從健身評估員開始。我的問題是,最好的方法是什麽。我一直在研究cython,ctypes和'鏈接和嵌入'。他們對我來說都是新手,現在已經超出了我的範圍,但我期待著學習一個,最終學習所有這些。

'適應度函數'需要將表達式樹的值與目標表達式的值進行比較。因此它將包含一個後綴評估器,它將以後綴順序讀取樹。我有python中的所有代碼。

我需要建議我現在應該學習和使用:cython,ctypes或鏈接和嵌入。

謝謝。

最佳答案

暫時忽略所有人的回答。您應該學習使用的第一件事是分析器。 Python附帶一個profile/cProfile;你應該學習如何閱讀結果並分析真正的瓶頸所在。優化的目標有三個:減少每次調用所花費的時間,減少調用次數,減少內存使用以減少磁盤抖動。

第一個目標相對容易。分析器將向您顯示最耗時的功能,您可以直接使用該功能進行優化。

第二個和第三個目標更難,因為這意味著您需要更改算法以減少撥打這麽多電話的需要。找到具有大量調用的函數,並嘗試找到減少調用它們的方法。利用內置的集合,它們得到了很好的優化。

如果你已經完成了上述所有操作並且仍然存在性能問題並且你在x86平臺上(基本上是大多數CPU),那麽就開始關註Psyco。 Psyco可以根據需要更改python代碼來優化Python代碼。

如果你正在進行大量的數字和數組處理,你應該看看Numpy/Scipy和gmpy第三方模塊。

接下來嘗試的是Cython。 Cython是一種與Python略有不同的語言,實際上Cython實際上是C語言的Python語言。

對於非常緊湊的循環中的部分代碼,您無法再使用任何其他方式進行優化,您可能希望將其重寫為C擴展。 Python對C語言的擴展有很好的支持。

轉載註明原文: 我需要加快功能。我應該使用cython,ctypes還是其他什麽?

猜你喜歡