簡體   English   中英

任務結果很大時應如何使用Celery?

[英]How should I use Celery when task results are large?

處理結果很大的Celery中執行的任務的最佳方法是什么? 我在考慮諸如表轉儲之類的事情,其中​​我可能要返回數百兆字節的數據。

我認為將消息塞入結果數據庫的幼稚方法無法在這里為我服務,更不用說如果我將AMQP用作結果后端。 但是,在某些情況下,延遲是一個問題。 根據導出的特定實例,有時我必須阻塞直到它返回並直接從任務客戶端發出導出數據(針對導出內容的HTTP請求進來了,它不存在,但必須在對該請求的響應...無論需要多長時間)

那么,為此編寫任務的最佳方法是什么?

一種選擇是在所有工作計算機上運行靜態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)

當然,您將需要某種方式來獲取舊文件,保證唯一性以及可能的其他問題,但是您已掌握了基本思路。

我通過構造我的應用程序以將數兆字節的結果寫到文件中來解決這個問題,我將它們存儲到內存中,以便它們在使用該數據的所有進程之間共享...這完全解決了如何將結果獲取到另一個問題機器,但是如果結果那么大,聽起來這些任務是服務器進程之間內部任務的協調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM