我正在运行一个系统,其中有几个工人从消息队列中获取作业,所有这些都使用 Django 的 ORM。在一种情况下,我实际上是在将消息从一个工作人员传递到另一个队列中的另一个工作人员。它是这样工作的:
- queue1 中的 Worker1 创建一个对象(MySQL INSERT)并将消息推送到 queue2
- Worker2 接受 queue2 中的新消息并检索对象(MySQL SELECT),使用 Djangos objects.get(pk=object_id)
这适用于第一条消息。但是在第二条消息中,worker 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() 中是否有任何缓存在这些版本之间有所不同?如果是这种情况,我可以通过某种方式清除它吗?