在dask.distributed上使用期貨時,有沒有辦法區分目前正在評估的期貨pending
和仍然在隊列中?如何區分排隊和正在運行的期貨(並殺死運行時間過長的期貨)
原因是我將大量任務(〜8000)提交給較小的工作人員(100),因此不是所有任務都可以立即處理。這些任務涉及調用第三方可執行文件(,通過subprocess.check_output
),在一些極少數情況下會進入無限循環。
因此,我想取消期貨運行時間太長(使用任意超時)。然而,似乎沒有辦法確定未來是否長期處於pending
狀態,因爲計算時間比平時長,或者僅僅因爲必須等待工作人員可用。
我的設置涉及一個分別運行dask-scheduler
和dask-worker
作業/作業數組的SGE羣集。 我試圖在提交Python函數直接設置超時,使用@timeout_decorator.timeout(60, use_signals=False)
從timeout_decorator package,但得到了以下錯誤:
"daemonic processes are not allowed to have children"
任何幫助將非常感激。
感謝您的快速答覆。我正在運行Python 2,其中'subprocess'缺少'timeout ='關鍵字,但我可以在下面的答案中獲得與代碼相同的效果。儘管這是一個特定於實現的細節,所以我將這個答案標記爲正確的答案。 – user3098840