請參閱下面更新的問題。Sidekiq處理大數據時處理重新排隊
原題:
在我目前的Rails項目,我需要解析大型XML/CSV數據文件,並將其保存到MongoDB的。 現在我用這個步驟:
- 從用戶接收上傳的文件,將數據存儲到MongoDB的
- 使用sidekiq執行MongoDB中數據的異步處理。
- 處理完成後,刪除原始數據。
對於localhost中的中小型數據,上述步驟運行良好。但是在heroku中,我使用hirefire來動態調整工人動態範圍。當工作人員仍在處理大量數據時,hirefire會查看空隊列並縮小工人動態範圍。這會向進程發送kill信號,並使進程處於不完整狀態。
我正在尋找一種更好的方法來進行解析,允許解析過程在任何時候都被殺死(在接收到kill信號時保存當前狀態),並允許進程重新排隊。
現在我正在使用Model.delay.parse_file,它不會重新排隊。
UPDATE
閱讀sidekiq維基之後,我發現article about job control。任何人都可以解釋代碼,它是如何工作的,以及在接收到SIGTERM信號並且工人重新排隊時如何保持它的狀態?
是否有任何替代方法來處理作業終止,保存當前狀態,並從最後位置繼續?
感謝,
嗨@nort,我還有其他問題給你。如何處理Sidekiq :: Fetcher.done?在另一個班級內循環?在執行過程中,我只有一次調用'ModelContainer.find(model_id).parse_data' –
應該實際上仍然可以正常工作,雖然有點未封裝...我在那裏的邏輯我傾向於放在工人而不是模型保持模型的輕薄。 – nort
參見:https://github.com/mperham/sidekiq/issues/1845 – nort