【发布时间】:2013-03-06 19:38:25
【问题描述】:
是否有可能有一些函数在函数中的每条指令上运行一个计数器递增,并在达到一个数字时执行一些行为?
解释一下,如果一个函数最终占用了虚拟机中一定数量的字节码指令,我希望能够引发异常。因此,如果有人创建了一个列表推导式,它会产生一个无限循环,或者创建一个无限 while 循环,它会提前强制中断。
这可以在 Python 中完成吗?
【问题讨论】:
-
dis模块可能会派上用场:docs.python.org/2/library/dis.html -
@delnan 它完全相关。试图以编程方式确定无限循环是无法计算的。我的观点是这不是防止永无止境的代码的有效方法。它只能通过严格限制可以在函数中完成的工作量来起作用,无论天气如何,代码是否正在做重要的工作。
-
@gbtimmon 是的,但这不是我们在这里所做的。我们不分析程序或尝试确定它是否完全停止,我们让它运行并(尝试)在它执行超过一定(有限)数量的指令时杀死它。
-
有一些字节码级别的技巧one can pull 但我无法想象将它们用于生产目的。如果您想编写一些安全的任务服务器,最好尝试使用 PyPy 的沙盒工具。
标签: python instructions