在Python中在任意时间中断方法执行
我有一个方法叫做 doA(),它有时候会卡住一段时间。请问在 Python 中有没有常用的模块可以控制 doA() 的执行时间,并且能够中断它?
当然,这可以通过线程来实现,所以在 threading 模块上简单封装一下可能是个不错的解决方案。
换句话说,我想要的代码大概是这样的:
import CoolAsyncControl
CoolAsyncControl.call(self.doA, timeout = 10)
1 个回答
6
你可以使用一个叫做 threading.Timer 的东西来调用 thread.interrupt_main,只要你在主线程中运行 doA
。需要注意的是,你想要的那种写法是不可行的,因为Python(就像大多数编程语言一样,除了像Haskell这样的少数语言)是“急切”的,也就是说,所有的参数在调用之前都会被完全计算出来。所以 self.doA()
会在 调用 方法之前就已经执行完毕了!你需要使用一些像下面这样的语法
CoolIt.call(self.doA, args=(), timeout=100)
这样 call
才能在调用 doA
之前先设置好定时器。