2009-10-17 33 views
4

一個流行的軟件開發模式似乎是:Python-then-profile-then-C設計模式的最佳實踐?

  1. 甩掉Python中的邏輯和算法。
  2. 配置文件可以找出慢位的位置。
  3. 將其替換爲C.
  4. 運輸代碼是高級和快速之間最佳的折衷方案。

我說流行只是因爲我看到人們說它是一個好主意。

但是有沒有實際使用過這種方法的大項目?最好是自由軟件項目,這樣我可以看看他們是如何做到的 - 也許可以學習一些最佳做法。

+2

做的元素的內置庫被視爲「大項目」?有很多東西(比如cStringIO和cPickle)已經完成了這個工作,這足以從中學到什麼? – 2009-10-17 17:53:21

+1

是準確的,這不是通常意義上的設計模式;它是一種開發方法 – 2009-10-17 18:21:11

回答

0

第3步錯了。在現代世界中,超過一半的時間「慢速位」是I/O或網絡綁定的,或者受到流程外的其他資源的限制。重寫它們只會引入錯誤。

+5

所以在步驟2中將「slow」替換爲「CPU-bound and time-consuming」 - 如果找不到任何此類位,則使用「GOTO 4」;-)。 – 2009-10-17 18:20:43

3

人們接近發展的方式有很多種。

有時候人們會按照你的三個步驟發現慢位是由於外部環境的原因,所以把Python重寫爲C並不能解決問題。這種緩慢有時可以在系統方面解決,有時可以通過應用不同的算法在Python中解決。例如,您可以緩存網絡響應,這樣您就不必每次都去網絡,或者在SQL中,您可以將工作卸載到`在服務器上運行的存儲過程中,並減小結果集的大小。一般來說,當你確實需要用C語言重寫某些內容時,首先要做的是尋找一個預先存在的庫,並且只創建一個Python包裝器(如果它不存在的話)。很多人在你面前走過這條路。

通常第1步是甩掉應用程序體系結構,懷疑某些區域可能存在性能問題,然後選擇一個C庫(可能已經爲Python包裝)並使用它。然後第2步簡單地證實,沒有真正的大問題需要解決。

我想說,對於一個擁有一個或多個有經驗的開發人員的團隊來說,嘗試從一開始就預測性能瓶頸並用預先存在的模塊緩解它們會更好。如果你是一名Python初學者,那麼你的3個步驟過程是完全有效的,即進入構建和測試代碼,知道如果你需要它,有一個分析器和快速C模塊的可能性。然後是psyco,以及將應用程序凍結成二進制可執行文件的各種工具。

如果您知道您需要使用一些C或C++模塊,另一種方法是從零開始編寫C應用程序,但是嵌入Python來完成大部分工作。這非常適用於有經驗的C或C++開發人員,因爲他們的代碼的類型是乏味的C.

2

做我也這樣想的時候,我開始使用Python

我已經做了一個粗略的想法第3步兩次(我記得)在12年。通常不足以稱之爲設計模式。通常這足以包裝現有的C庫。通常其他人已經寫了封裝。

0

Mercurial是一個很好的例子:它寫在Python and C和它一樣快git的,其中大部分是用C寫的