pythonのシグナルハンドリングのセマンティクスでは、メインスレッドのみがシグナルハンドラを設定でき、メインスレッドのみがシグナルハンドラを呼び出すことができます。メインスレッドのみがPythonでシグナルハンドラを設定できる理由
なぜこのようなデザインですか?
pythonのシグナルハンドリングのセマンティクスでは、メインスレッドのみがシグナルハンドラを設定でき、メインスレッドのみがシグナルハンドラを呼び出すことができます。メインスレッドのみがPythonでシグナルハンドラを設定できる理由
なぜこのようなデザインですか?
このコメントはsignalmodule.c SOURCEFILEはCPythonに表示されます。
シグナルとスレッドとの相互作用に
/* NOTESスレッドがサポートされています、
- だけが主なthr EADは、いずれかのスレッドが
- 信号はメインスレッドだけ
すなわちに配信されているシグナルハンドラを取得することができ、シグナルハンドラ
を設定することができます我々は(とにかくこれがPythonであまり意味がありません
を引く)SIGFPEのように「同期信号」をサポートしていないにも私たちはすべてではない
スレッドの実装をサポートするので、スレッド間通信の手段として
信号をサポートします(少なくとも私たちのスレッドライブラリ
はありません)。我々はまだ他の人に(例えばSolarisの場合)、そのような信号は
に配信されている間、いくつかの実装ではシグナルキーボード(例えばSIGINT)によって生成された
は、すべての
スレッド(例えばSGI)に配信されるという問題を抱えています1つのランダムなスレッド(中間の可能性は
がメインスレッド(POSIX?今のところ、私たちは という3つのすべてのケースで動作する実装を持っています。ハンドラ は、getpid()がメインスレッドと同じでない場合にシグナルを無視します。XXXこれはハックです。
*/
この私の読み取りはシグナルハンドラの設定の制限は、OSレベルの信号の実装の違いに対応することを回避することにより、CPythonの中に信号処理のimplmentationを簡素化するということです。
Python signal
モジュールがそのように実装しているためです。シグナルハンドラによって非メインスレッドからGILをロックする簡単な方法(もしあれば)がないので、私は部分的に信じています。ですから、私はむしろそれがGIL制限だと言うでしょう。
あなたはこのに興味があるかもしれない:http://www.dabeaz.com/python/UnderstandingGIL.pdf
「GILを非メインスレッドからロックするのは簡単な方法がないので部分的に信じています」 - 逆にGILを非メインスレッドからロックするのは簡単で、どのスレッドでも必須ですPythonコードを実行している間にGILをロックします。 – user2357112
。私は "非メインスレッドのシグナルハンドラから" – digitake
多分、スレッドの終了機能と関係があるかもしれません。 – Marichyasana