2014-01-21 115 views
3

我構建了一個門戶,其中一個頁面列出了來自Octopus Deploy的發佈。然而,每個版本所需的一些信息將保存在數據存儲區(共享驅動器)的zip文件中。檢查子進程是否正在運行

我目前從Octopus的API獲得發佈,然後檢查一個mongo數據庫,其中來自zip文件的已存儲信息已經被訪問過,所以我們只需要在第一次創建時讀取zip文件一次。

當前所有的邏輯工作,但當它第一次讀取壓縮文件,它是完全阻止。所以我把它放在一個運行並且工作得很好的孩子進程中。

當前每當用戶點擊發布頁面時都會運行這些邏輯。如果章魚部署的所有結果都在數據庫中,那麼它只是返回這些結果。如果沒有,它會返回結果,然後使用套接字io返回從子文件中讀取的信息,一旦子進程將其插入到數據庫中。

現在的實際問題/問題。如果用戶每次點擊該頁面並且從不在數據庫中的章魚獲得釋放,則每當用戶點擊該頁面時其運行,它將開始子過程以讀取該zip。如果用戶B在用戶A的子進程完成之前點擊該頁面,他們也將從章魚中得到一個不在數據庫中的版本,因此會嘗試敲擊子進程來執行與用戶A相同的操作。閱讀zip文件阻止它等到所有的zip文件都從用戶A讀取,然後重複用戶B的進程。

我如何檢查子進程是否已經在執行zip讀取,如果它不是那麼執行,如果是,那麼做別的事情?

我試着設置一個'inuse'變量,並在嘗試在子進程中執行讀取zips函數並在調用它的模塊中檢查它。麻煩在子進程中,zip讀取函數阻塞它,一旦完成,將inuse變量設置爲false,因此排隊調用運行相同的事情。在每次用戶加載頁面時加載它的模塊,以便將其重置爲默認值false,以便始終調用讀取zip函數。

+0

檢查退出事件偵聽器。 http://nodejs.org/api/child_process.html#child_process_event_exit –

+0

@KamranShahid在子進程完成時不會激發嗎?在用戶A啓動子進程的情況下,這將如何工作。 「讀取zip文件」功能正在進行中。然後用戶B擊中該頁面,並想要查找是否正在讀取「讀取zip文件」功能? – ste2425

+0

維持狀態的某種全局對象。就像我們在啓動孩子時設置了一個標誌,並在ext事件觸發時將其設置爲關閉 –

回答