Djangos ORM を使用して、メッセージ キューからジョブを取得するいくつかのワーカーでシステムを実行しています。あるケースでは、あるワーカーから別のキュー内の別のワーカーにメッセージを実際に渡しています。それはこのように動作します:
- queue1 の Worker1 がオブジェクト (MySQL INSERT) を作成し、メッセージを queue2 にプッシュします。
- Worker2 は queue2 で新しいメッセージを受け取り、Djangos の objects.get(pk=object_id) を使用してオブジェクト (MySQL SELECT) を取得します。
これは最初のメッセージで機能します。しかし、2 番目のメッセージ ワーカー 2 では、id object_id を持つオブジェクトが見つからないという理由で常に失敗します (Django の例外 DoesNotExist を使用)。
これは、Django 1.2.3 と MySQL 5.1.66 を使用したローカル セットアップでシームレスに動作します。問題は、Django 1.3.1 と MySQL 5.5.29 を実行するテスト環境でのみ発生します。
worker1 がメッセージをプッシュする前に毎回 worker2 を再起動すると、正常に動作します。これは、ある種のキャッシングが行われていると私に信じさせます。
これらのバージョン間で異なる Django の objects.get() に関連するキャッシュはありますか? その場合、何らかの方法でクリアできますか?