我有一個Python(嗯,它現在是PHP,但我們正在重寫)函數,它需要一些參數(A和B)並計算一些結果(在圖中找到從A到B的最佳路徑,圖是隻讀的) ,在典型情況下,一次呼叫需要0.1s到0.9s來完成。用戶可以將此功能作爲簡單的REST Web服務訪問(GET bestpath.php?from = A & = B)。當前的實現非常愚蠢 - 這是一個簡單的php腳本+ apache + mod_php + APC,每個請求都需要加載所有數據(在php數組中超過12MB),創建所有結構,計算路徑並退出。我想改變它。每個worker都是一個運行在循環中的python應用程序(獲取請求 - >處理 - >發送應答 - >獲取請求...)每個工人一次可以處理一個請求。我需要一些可以充當前端的東西:獲取用戶請求,管理請求隊列(可配置超時),併爲我的工作人員提供一次請求。如何處理Python工作人員長時間運行的請求?
如何處理這個?你能提出一些設置嗎? nginx + fcgi或wsgi或其他東西? HAProxy的?正如你可以看到我是一個Python新手,反向代理等我只需要一個關於架構(和數據流)的起點
btw。工作人員正在使用只讀數據,因此不需要保持它們之間的鎖定和通信
多處理看起來不錯,但坦率地說,我不需要所有的功能(通信,同步等),我的工作人員是獨立的,在這種設置下,我需要在每臺服務器上安裝一個前端,對吧?我正在考慮在worker中實現基本的http解析(或者別的什麼,我不知道其他協議可以在worker和revproxy之間使用),並讓一些反向代理請求處理服務器池(工作人員在),但我不知道這種方法是否有意義,以及從哪裏開始(哪個revproxy,如何實現工作人員<-> revproxy通信等) – winter 2009-11-04 16:26:08
除通信目的外您不需要同步,但您需要通信(從前端到工作的任務,從工作人員到前端的結果 - 不,你絕對不需要每個服務器的前端,你爲什麼這麼認爲?),而多處理提供的隊列對於,讓你擺脫對協議,代理和其他任何問題的擔憂 - 我認爲你急於走向的方向可能會讓你陷入一團糟的工作當中,而多處理更容易使用! – 2009-11-05 01:15:20
好的,但與多處理我需要編寫2個應用程序:app1 - 一個前端進程管理隊列,app2 - 許多工作進程,對吧?那麼:app1可以在不同的machnies上管理app2嗎?是app1持久性?我的意思是 - 它的代碼和數據保持在來自web服務器的請求之間?如果沒有隊列丟失,如果是 - 它必須是異步的才能處理同時發出的請求。所以app1基本上是模仿異步網絡服務器 - 它唯一的目的是管理請求的隊列。我想避免複製已經存在的功能,這使得複雜化一切 – winter 2009-11-05 22:47:19