2012-09-27 153 views
0

我想通過複製模型將主django項目的繁重過程分享給另一個django項目。在兩個Django項目之間共享模型(和表)

這意味着共享數據庫表。下面是一張圖表,用於解釋如何共享表格:按照編號的箭頭查看我如何想象信息的流向。

http://i.imgur.com/kOdeq.png

而接口項目是拼圖的用戶交互部分,它處理輸入和輸出,並定義一個用戶想什麼問題都解決了。 SOLVE項目解決了嚴重的用戶定義問題,準備就緒後,將解決方案作爲記錄放置在INTERFACE可以讀取的自己的表格中,並將界面呈現給用戶。

這種設計有兩種ORM同步方面的警告嗎? 這是一個好主意嗎?

回答

1

換句話說,你正在重新創建一個任務隊列?

也就是說,接口只是插入代表「爲我做這件事」的記錄,並且稍後從「爲您完成」表格(或同一張表格,無所謂)中檢索結果?

你真正想要的是某種遠程異步rpc調用接口,如果你願意,你可以用這種方式重建。

我仍然會推薦重新評估芹菜 - 我已經把它關閉了好幾次,但現在我已經把它設置了讓我感到震驚,我之前沒有使用它。你甚至可以使用Django數據庫作爲消息隊列後端(儘管我只是說爲低容量網站做這件事)。

不管怎樣,至於具體的問題:

有兩個獨立的過程中使用相同的數據庫表既不Django的也不是你的數據庫連接器將在這方面增加額外的限制沒有繼承的問題。

您將需要您的工作進程(「解決」)定期輪詢數據庫以查找要執行的任務,或向其發送消息(提示:芹菜!)。您的用戶界面客戶端(「界面」)可以在用戶刷新時檢查數據庫。

從實現的角度來看,它可能最簡單的方式是在兩個項目中完全共享代碼(所有模型,視圖等)。你會有一個進程以正常的方式啓動ui web服務器,而對於worker來說,連接一個自定義管理命令可能是啓動你的worker循環的最簡單的方法。

如果您打算寫入行時未使用select_for_update,那麼您可能會遇到數據庫鎖定/爭用條件的一些問題。或者,您可以使用.save(update_fields=zzz)來避免爭用,但只有1.5。

+0

它真的讓我誤以爲django-db可以作爲隊列使用。謝謝! – sdkfasldf

相關問題