我正在運行一個系統,其中有幾個工作人員正在使用Djangos ORM從消息隊列中獲取作業。 在一種情況下,我實際上將一個工作人員的消息傳遞給另一個工作人員。 它的工作原理是這樣的:在Djangos對象模型中緩存
- Worker1在隊列1創建一個對象(MySQL的INSERT)並按下消息隊列2
- Worker2在隊列2接受新的消息,並獲取對象(MySQL的SELECT),使用Django的對象.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()在這些版本中有不同的緩存嗎?如果是這樣的話,我可以以某種方式清除它嗎?
你確保你之前提交事務**添加第二個任務?也許你只在本地設置一名工人,並且有多名工人在生產。 – 2013-04-22 23:00:54
另外,確保Django端的MySQL事務設置是正確的。有些人似乎有讀取事務隔離的問題。見http://stackoverflow.com/q/3346124/302243 – 2013-04-23 00:12:06
謝謝你們!我們是正確的,我需要手動確認事務已提交,然後再提交給其他工作人員。 @AustinPhillips您的鏈接幫助了很多,如果您願意,請將其填入答案中,我會給予您信任 – Niklas9 2013-04-23 11:30:22