簡體   English   中英

檢查Celery隊列中來自Python的任務

[英]Inspecting Celery queues for tasks from Python

我有一個Django + Celery應用程序,其中Celery用於將Django模型實例推(拉)到第三方SOAP服務。

我的Django模型之間具有依賴關系,並且還具有以下簡單哈希:

class MyModel(Models):
    def get_dependencies(self):
        # ...
        return [...]

    def __hash__(self):
        return hash(self.__class__.__name__+str(self.pk))

在我自己的實現中,此哈希非常方便,由於穩定​​性問題,我不得不將其刪除。 芹菜的根基要好得多。

將實例推送到SOAP服務時,必須確保已將其依賴項推送。 這是通過檢查所有相關實例的pushed_ok時間戳字段來完成的。

困難的部分是當實例a取決於實例的列表deps (均為實例MyModel子類)被推動。 我不能推送a除非deps所有實例都已被Celery處理。 換句話說,我需要序列化任務,以便遵守依存關系順序。

芹菜是這樣運行的:

celery -A server worker -P eventlet -c 100

我怎樣才能防止在eventlets(/進程/線程)的一個運行a它的依賴之前,如果有的話,已完成被其他eventlets運行?

謝謝您的幫助。

我尋求了一個務實的解決方案,將所有資源的依賴檢查(包括將不同步的依賴推送到soap服務器)移到了celery任務中。 而不是嘗試根據資源的依賴性序列化任務。

有利的一面是它使它保持簡單,我可以快速實現它。

不利的一面是,我暫時鎖定了一個工作程序,並且可能會鎖定許多同步SOAP操作,而不是在工作程序之間分派這些操作。

暫無
暫無

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

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