2011-11-21 58 views
0

我已經嘗試過多種方法,希望看到你們認爲是用Python解決這個問題的最佳方法。並行運行一系列函數來回答HTTP請求

基本上,我有一個Web服務,接受提供單個查詢條件的請求,並與該條款並行執行一系列計算。這些計算可以被認爲是單獨的函數調用。

的想法是,只要請求到來時,我調用函數異步,並保持該請求,直到結果開始慢慢滲透。

從我的研究,這似乎是使用圖書館一樣gevent是可能是最好的選擇,但我仍然不完全熟悉greenlet。此外,它似乎是爲了完成我期待的功能類型(對於通過長請求發送給客戶端的結果,因爲它們變得可用),我需要使用支持這種功能的特殊類型的StreamServer。響應本身就是JSON對象,由前端的JavaScript模塊讀取,而這些JSON對象將在UI組件被更新時返回給瀏覽器。

這樣做的最佳方法是什麼?使用類似gevent的東西是否有意義,或者應該在沒有圖書館幫助的情況下使用協同例程來實現?我相信這是過去很多人在過去做過的事情,我想收集一些建議。

非常感謝,如果您想了解更多的細節,請告訴我,我期待聽到您的建議!

+0

問題是什麼? –

+0

問題是,這樣做的最佳方法是什麼?使用類似gevent的東西是否有意義,還是應該使用協程來實現,而不需要庫的幫助?我相信這是過去很多人在過去做過的事情,我想收集一些建議。 –

回答

0

假設您所說的「計算」不受CPU限制,gevent對於那種事情來說是很棒的。您的要求的處理器也可以是這樣的:

def handle_request(request): 
    ... 
    pool = gevent.pool.Group() 
    results = group.map(do_computation, input_data) 
    return results 

如果它們是CPU限制的,不過,你會當它涉及到在單一操作系統CPU密集型任務需要考慮multiprocessing,如Python是一般相當差系統進程。