如何在翻译的SIGINT程序中捕获信号(特别是RPython )?
我已经浏览了PyPy源代码树,我找到了CPython signal模块,试图在翻译程序中使用这个模块会给出翻译过程中的预期错误:
[translation:ERROR] Exception: unexpected prebuilt constant: <built-in function signal>还有pypy.module.signal,但是我不知道我是否应该使用它,或者如何使用它。该模块确实提供了一个signal函数,但它需要一个额外的space参数;这些space参数在源代码树中显示了几个位置,我无法计算出它们所引用的内容或应该传递的内容。
背景:我希望有一个运行时间任意长的计算,但是捕获^C,以便在程序退出之前打印出结果。(主循环周围明显的try: ... except KeyboardInterrupt: ...也不起作用。)
发布于 2012-04-24 15:32:46
您必须使用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()https://stackoverflow.com/questions/10295921
复制相似问题