ホームページ  >  記事  >  バックエンド開発  >  Python のマルチプロセッシング プールでキーボード割り込みを適切に処理する方法

Python のマルチプロセッシング プールでキーボード割り込みを適切に処理する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-22 14:33:02134ブラウズ

How to Gracefully Handle Keyboard Interrupts in Python's Multiprocessing Pools?

Python のマルチプロセッシング プールでのキーボード割り込みの処理

Python のマルチプロセッシング プール内で KeyboardInterrupt イベントを管理しようとすると、プロセスがハングして外部終了が必要になるという問題が発生することがよくあります。この記事は、この問題に対処し、実行可能な解決策を提供することを目的としています。

質問で紹介された課題について詳しく説明すると、提供されたコードは、KeyboardInterrupt 信号を受信すると (^ を押すことによって) プール内のすべてのプロセスを正常に終了することを目的としています。 C)。ただし、観察されたように、KeyboardInterrupt は実行の一時停止をトリガーし、意図した終了手順が有効になるのを妨げます。

これは、KeyboardInterrupt シグナルの threading.Condition.wait( )条件。この問題は、タイムアウトが指定されない限り wait() が返らないために発生します。その結果、このプロセス中に KeyboardInterrupt は受信されません。

この課題を克服するために、推奨される解決策では wait() 条件に時間制限を導入します。

<code class="python">results = pool.map_async(slowly_square, range(40)).get(9999999)</code>

このタイムアウトを組み込むことで、 wait() 条件は KeyboardInterrupt 信号に即座に応答するよう強制され、プール内のすべてのプロセスを正常に終了できるようになります。

したがって、この変更により、Python のマルチプロセッシング プールで KeyboardInterrupt を管理するための堅牢なアプローチが提供され、ユーザーは次のことが可能になります。いつでも、制御された方法ですべてのプロセスを効果的に停止します。

以上がPython のマルチプロセッシング プールでキーボード割り込みを適切に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。