Celeryを使用してDjangoモデルインスタンスをサードパーティのSOAPサービスにプッシュ(プル)するDjango + Celeryアプリケーションがあります。Pythonのタスクのためのセロリキューの検査
class MyModel(Models):
def get_dependencies(self):
# ...
return [...]
def __hash__(self):
return hash(self.__class__.__name__+str(self.pk))
は、このハッシュは、私は安定性の問題が原因でドロップしなければならなかった私の独自の実装に便利になった:
私のDjangoのモデルはまた、それらの間の依存関係と、このような単純なハッシュを持っています。セロリははるかに高い地面です。
インスタンスをSOAPサービスにプッシュするとき、その依存関係がプッシュされていることを確認する必要があります。これは、すべての関連するインスタンスをチェックして、pushed_ok
のタイムスタンプフィールドを確認することによって行われます。
インスタンス(すべてがMyModel
サブクラスのインスタンス)のリストに依存するインスタンスa
がプッシュされているときに難しい部分です。 deps
のすべてのインスタンスがCeleryによって処理されていない限り、a
をプッシュすることはできません。言い換えれば、依存関係の順序が尊重されるようにタスクをシリアライズする必要があります。
セロリは、このように実行されます。私はその依存関係の前にa
を実行しているからeventlets(/プロセス/スレッド)のいずれかを防ぐことができます
celery -A server worker -P eventlet -c 100
どのように、もしあれば、他のeventletsによって実行されて終了しましたか?
ありがとうございました。