2010-01-29 75 views
2

我需要啓動長時間運行的進程來響應django中的表單提交。然後,我希望能夠使用ajax進行輪詢,並使視圖以進程的狀態(啓動,停止或運行)進行響應。另外,我希望能夠停止這個過程。django中長時間運行進程的全局狀態

所以我的看法是這樣的:

def start() 
    . . . 
def stop() 
    . . . 
def status() 
    . . . 

這個特殊的問題已經對如此提及多次,但我的情況略有不同:我要尋找一個解決方案,完全是Python的,不需要在股票django中找不到任何東西,並且不需要使用數據庫。

我發現的最接近的東西是this post。我已經實現了代碼並精簡了它,但事實證明request.session不是全局的(兩個瀏覽器有不同的會話)。

這可能是我的問題可以通過使用request.session以外的其他東西來解決,以保存啓動/停止/狀態狀態,但我不知道那會是什麼。

我在閱讀碰到另一種可能性是Django的中間件,但根據this

__init __()被調用一次 - 在服務器啓動 - 而不是單個 請求

還有一篇博客文章here談論django中的全球國家。 有什麼想法?

+0

所以@jetxee發佈什麼的問題是,你希望任何人(無論誰開始了長時間運行的任務)都能夠檢查該任務的進度? – 2010-01-29 20:36:26

+0

是的,這是完全正確的。 – g33kz0r 2010-01-29 20:57:04

+0

如果你說「不需要在股票django中找不到任何東西」,然後說「不需要使用數據庫」。由於Django與數據庫耦合,你已經將大量的股票django帶出了這個等式。關心啓發我們爲什麼? – Spacedman 2011-10-22 10:41:42

回答

1

如果狀態需要從任何進程訪問,並且您不想將其存儲在數據庫中(並且我看不出爲什麼,那是最好的地方),您可以將它存儲在文件系統上的臨時文件。

+0

這就是我最終做的。我使用了一個已知狀態爲/tmp/program.pid的文件 – g33kz0r 2010-01-29 21:55:40

1

一種方法是啓動一個單獨的線程並通過線程模塊進行監視。