2012-11-14 57 views
3

我正在使用flask python框架編寫web應用程序。作爲其某些功能的一部分,它需要運行一些編譯的程序(C++代碼,但我只能訪問二進制文件),它執行某些操作(需要用戶上傳一些文件,處理它們並生成一些輸出文件。)
構建這樣的應用程序的最佳方式是什麼?此代碼沒有庫或API。從Python web應用程序調用二進制可執行文件

我可以使用subprocess模塊在每次需要時運行這個二進制文件,但是我擔心如果服務器獲得太多請求(這個過程是CPU密集型的)會發生什麼。 我想我可以設置它可以處理的併發請求數量的限制。有沒有更好的解決方案?

(只是出於好奇,說我有CPP源代碼,我怎麼可能去去使用這個代碼構建Web應用程序嗎?)

+0

你不應該在一箇中提出2個問題。最後一部分「只是出於好奇」如果我是你,我會刪除。你可以在一個新的問題中提出這個問題。 –

回答

0

如果你有cpp的源代碼,你會鏈接蟒蛇它通過swigboost來調用你編譯的cpp目標模塊(編譯後得到的.o文件)。

參考痛飲教程 - http://www.swig.org/tutorial.html

2

我立即建議將是這些:

  1. 首先,使用二進制通過系統調用可能會工作在一定程度上雖然是一個黑盒子,當你」已經提到你很容易遇到問題。你總是有可能處理系統調用的返回值,但這又不是很理想,所以包裝在一個簡單的API中可能只會提供有限的用處。我的直接建議是不要使用此選項,並嘗試使用以下某種想法編譯它以滿足您的需求。

  2. 如果您有權訪問源代碼;創建一個python extension module,使您可以與本機C++代碼進行交互。給定的鏈接可以比我自己更好地解釋,但如果您以前提到的方式將代碼整合到無需從二進制文件啓動的方式中,這可能是一種相當輕鬆的方式。

  3. 此外,要爲C++代碼構建原生Web應用程序,我會將您轉向Wt C++ web toolkit。這是一個Qt樣式的框架,它允許您使用本地C++構建交互式網頁,並執行二進制代碼來運行Web服務器並創建一個完全成熟的網站。如前所述,檢查鏈接,你會更好地瞭解我在說什麼。可能還有其他框架,但我已經使用了它,並發現它非常簡單。

0

使用celery來運行任務。它能夠使調用異步,並且您還可以通過輪詢它或通過網絡套接字與芹菜進行通信。

當有大量的任務需要處理時,建議使用芹菜。

相關問題