2

SIGINT翻訳されたRPythonプログラムでシグナル(特に/特に)をキャッチするにはどうすればよいですか?

PyPy ソース ツリーを調べたところ、CPythonsignalモジュールが見つかりました。翻訳されたプログラムでこれを使用しようとすると、翻訳中に予想されるエラーが発生します。

[translation:ERROR]  Exception: unexpected prebuilt constant: <built-in function signal>

もありますがpypy.module.signal、それを使うべきかどうか、またはどのように使用するかはわかりません。そのモジュールはsignal関数を提供しますが、追加のspaceパラメーターを取ります。これらのspaceパラメーターはソース ツリーのいくつかの場所に表示されますが、それらが何を参照しているのか、またはそこに何を渡す必要があるのか​​ わかりません。

背景:任意の時間実行する計算を探してい^Cますが、プログラムが終了する前に結果を出力できるようにキャプチャします。(メインループの周りの明らかなtry: ... except KeyboardInterrupt: ...ものも機能しません。)

4

1 に答える 1

3

プラットフォームの小さなラッパーである RPython シグナル処理関数を使用する必要があります。必要な機能は にありますpypy.module.signal.interp_signal。たとえば、pypysig_ignore(signum)は と同等signal(signum, SIG_IGN)です。pypysig_poll保留中のシグナルがある場合は、それを返すために呼び出します。以下は、シグナルの処理を要求し、シグナルが到着するのを待つ抜粋です。

pypysig_setflag(signum)
while True:
    n = pypysig_poll()
    if n < 0:
        # No signals pending
        break
    if n == signum:
        handle_signal()
于 2012-04-24T15:32:46.617 に答える