在Python中在任意时间中断方法执行

1 投票
1 回答
598 浏览
提问于 2025-04-15 19:27

我有一个方法叫做 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 之前先设置好定时器。

撰写回答