如何在 Python 多處理池中優雅地處理鍵盤中斷?

Barbara Streisand
發布: 2024-10-22 15:44:18
原創
452 人瀏覽過

How to Gracefully Handle Keyboard Interrupts in Python Multiprocessing Pools?

Python 多處理池中鍵盤中斷的優雅處理

使用 Python 的多處理池時,處理 KeyboardInterrupt 事件並不總是那麼簡單。在本文中,我們將探討如何處理此類中斷並確保進程正常退出。

提供的程式碼範例示範了這項挑戰。儘管有一個用於 KeyboardInterrupt 的 catch 區塊,但按下 control-C 時它不會執行。相反,程式會掛起,直到外部終止。

此問題的根源在於與 threading.Condition.wait() 中的條件阻塞相關的 Python 錯誤。在這種情況下,鍵盤中斷永遠不會被發送。結果,它阻止了池內處理中斷。

解決此問題的一種方法是在等待結果時指定逾時。可以使用有超時參數的map_async()方法來取代map()。這種方法允許識別和處理鍵盤中斷:

透過設定一個大的超時值,我們實質上告訴池繼續等待結果,直到被使用者中斷。

值得注意的是,此解決方法存在一些限制。如果逾時在所有任務完成之前到期,則未完成的結果將被丟棄。因此,選擇適當的超時值來平衡反應能力和結果不完整的風險至關重要。

以上是如何在 Python 多處理池中優雅地處理鍵盤中斷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!