![](/img/trans.png)
[英]Python Celery weird behavior when routing tasks to specific RabbitMQ queues
[英]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.