2010-11-22 45 views
5

什麼來處理芹菜,結果就是大執行的任務的最佳方式?我正在考慮諸如表格轉儲之類的東西,我可能會以數百兆字節的形式返回數據。當任務結果很大時,我應該如何使用芹菜?

我在想,臨時抱佛腳的消息到結果數據庫的簡單方法是不會,如果我使用AMQP我的結果後端這裏伺候我,要少得多。不過,我有一些延遲問題。這取決於出口的特定實例,有時我不得不阻塞,直到它返回,並直接從發射任務的客戶端導出數據(HTTP請求遭到了出口的內容,它不存在,但必須提供在迴應這一請求......也不管需要多長時間)

那麼,什麼是寫這個任務的最佳方法是什麼?

回答

4

一種選擇是有一個靜態的HTTP服務器上的所有工作人員的機器上運行。然後,您的任務可以將較大的結果轉儲到靜態根目錄中的唯一文件,並返回該文件的URL引用。接收機可以隨時取得結果。

例如。隱約的東西是這樣的:

@task 
def dump_db(db): 
    # Some code to dump the DB to /srv/http/static/db.sql 
    return 'http://%s/%s.sql' % (socket.gethostname(), db) 

你當然需要收割的舊文件,以及保證唯一性,並可能等問題的一些手段,但你的總體思路。

0

我處理這個問題通過構建我的應用程序編寫數兆字節的結果到文件中,這是我他們MEMMAP到內存中,因此他們正在使用該數據的所有進程間共享......這完全巧妙解決了如何獲得的問題結果傳給另一臺機器,但如果結果很大,聽起來像這些任務是內部任務在服務器進程之間的協調。