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 回答