2012-11-09 79 views
1

讓我們假設,僅僅爲了舉例,我有一個用於處理視頻的Django web應用程序,我想用芹菜來卸載其中的一些任務。如果我在Celery中有一個任務,比如視頻編輯,那麼這個任務對於處理器密集程度非常高,我不想在運行Django的服務器上運行它。有沒有辦法將您在Django應用程序中定義的任務發送到另一臺服務器上遠程運行?Django Celery處理器強化任務

我剛剛閱讀了關於芹菜的所有文檔,我沒有看到這種情況。似乎適合這種情況的唯一方法是在其他地方運行Celery,並使用Celery HTTP Gateway向其發出HTTP請求。

對於django-celery執行任務的位置?你在哪裏設置你的代理網址,或者在運行django的機器上?

回答

3

芹菜遠程執行開箱即用任務。假設你有一個python模塊,裏面有一個芹菜工作人員在做你的視頻資料,叫做videoprocessor.py。你把你的遠程計算機上,並啓動工作者有:

celery -A videoprocessor worker 

(如果你想在命令行中運行它)

也放置在Web服務器機器上的模塊,但你不是從那裏開始。但是,它可以通過Web服務器主機上的主腳本導入,這是一個名爲client.py的腳本,用於說明問題。此外,它以與遠程機器完全相同的名稱導入,以「MyPackage.videoprocessor」開頭。

現在,當Web服務器上的主腳本client.py導入您的videoprocessor.py模塊時,它會在該模塊中的worker中創建一個簽名。此簽名也適用於遠程計算機上的videoprocessor.py。並且,由於該服務器正在運行,而服務器計算機上的videoprocessor.py沒有,所以每次都會使用遠程工作人員。

確保遠程計算機上的工作人員使用與Web服務器計算機上的客戶端腳本相同的後端。這可能是Redis或RabbitMQ或別的,您需要至少指定IP編號,可能更多(數據庫,端口)取決於您的設置。

相關問題