使用 Python 多處理池時,處理鍵盤中斷事件並不總是那麼簡單。在本文中,我們將探討如何處理此類中斷並確保進程正常退出。
提供的程式碼範例示範了這項挑戰。儘管有一個用於 KeyboardInterrupt 的 catch 區塊,但按下 control-C 時它不會執行。相反,程式會掛起,直到外部終止。
此問題的根源在於與 threading.Condition.wait() 中的條件阻塞相關的 Python 錯誤。在這種情況下,鍵盤中斷永遠不會被發送。結果,它阻止了池內處理中斷。
解決此問題的一個方法是在等待結果時指定逾時。可以使用有超時參數的map_async()方法來取代map()。這種方法允許鍵盤中斷被識別和處理:
results = pool.map_async(slowly_square, range(40)).get(9999999)
透過設定一個大的逾時值,我們本質上告訴池繼續等待結果,直到被使用者中斷。
值得注意的是,有此解決方法的一些限制。如果在所有任務完成之前超時,未完成的結果將被丟棄。因此,選擇適當的超時值來平衡反應能力和結果不完整的風險至關重要。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3