2011-09-01 29 views
2

我正在嘗試開發一個能夠讓用戶在服務器上運行C程序的Django網絡應用程序。我目前以下的步驟:使用Django進行遠程代碼執行的Web應用程序

  • 代碼用戶類型和點擊了「Submit」按鈕
  • 代碼進入服務器;服務器把它放在一個臨時文件
  • 代碼是用匯編了呼叫subprocess.Popen()
  • 輸出(錯誤)返回到瀏覽器

這是一個簡單的模型,做工精細。但是,我不知道這是否是「完美」的模式,我有一些擔憂它的可擴展性(和安全性):

  1. 它會更好使用threading
  2. 使用multiprocessing會更好嗎?
  3. 我自己提出的相關問題中指出了叉炸彈問題here - 如何處理? apache2.conf中的以下設置是否能夠處理這種情況?
 

    # prefork MPM 
    # StartServers: number of server processes to start 
    # MinSpareServers: minimum number of server processes which are kept spare 
    # MaxSpareServers: maximum number of server processes which are kept spare 
    # MaxClients: maximum number of server processes allowed to start 
    # MaxRequestsPerChild: maximum number of requests a server process serves 
 

說,當我考慮的情況下,5,15,50用戶會嘗試以並行方式運行他們的代碼。此外,暫時假定不寫入惡意代碼。

剛纔提到,mod_wsgimpm-prefork與Apache2正在使用。

感謝您的所有建議!

+0

你在做什麼,使用mod_wsgi和prefork MPM的嵌入模式是一個不好主意。去閱讀http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html –

回答

2

也許Celery項目會幫助你。

Celery是基於分佈式消息傳遞的異步任務隊列/作業隊列。它專注於實時操作,但也支持調度。

執行單元(稱爲任務)在使用多處理,Eventlet或gevent的單個或多個工作服務器上同時執行。任務可以異步執行(在後臺)或同步執行(等待直到準備就緒)。

+0

謝謝,我使用'芹菜'。但是,不確定與性能有關的事情。 – Barun

相關問題