2012-08-31 28 views
0

我正在用Django編寫一個Web應用程序,用戶可以用統計數據上傳文件。工作線程/隊列在上傳後處理數據集?

數據在正確使用前需要處理(每個數據集在處理完成前可能需要幾分鐘的時間)。我的想法是爲此使用python線程,並將數據處理卸載到單獨的線程中。

但是,由於我使用的是uwsgi,因此我已閱讀了一個名爲「Spoolers」的功能。關於這方面的文檔相當短,但我認爲這可能是我正在尋找的。不幸的是,uwsgi的-Q選項需要一個目錄,這使我感到困惑。

無論如何,實現類似工作線程的最佳實踐不妨礙uwsgi的web工作人員,以便我可以在後臺可靠地處理數據,同時仍然可以訪問Django的數據庫/模型?我應該使用線程嗎?

回答

0

所有的卸載子系統都需要某種'隊列'來存儲'要做的事情'。

uWSGI後臺打印程序使用類似打印機的方法,其中目錄中的每個文件都是任務。當完成文件中的任務被移除時。其他系統依賴於更重的/高級的服務器,比如rabbitmq等等。

最後,不要直接使用後臺打印程序的低級別的API,但依靠裝飾:

http://projects.unbit.it/uwsgi/wiki/Decorators

+0

現在我不得不爲所有(完成和未完成的)數據集數據庫記錄,每他們使用「狀態」字段,因此我可以隨時向用戶提供反饋。我會寫什麼文件到這些文件?每個要處理的數據集的UUID或主鍵?假脫機程序代碼在哪裏運行(在哪個進程中)?我可以從那裏訪問任何東西,比如models/db,還是有任何限制? – BastiBen

+0

假脫機程序可能被視爲「無關聯」的工作人員。它是一名工作人員,但無法在套接字上接收請求。所以,後臺處理程序可以訪問所有的django內部。另一個解決方案(更通用)是使用mules,它們是一個更爲prymitive的實現,允許您直接與數據庫進行交互(不需要在spooler目錄中保存任務)http://projects.unbit.it/uwsgi/wiki/Mules – roberto

+0

Looks像騾子是我正在尋找的東西。謝謝! – BastiBen