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

shu*_*lov 1 python multithreading asynchronous

我有一些方法doA()偶尔挂起一段时间.Python中是否有可以控制doA()执行时间并中断它的常用模块?当然,它可以通过线程实现,因此围绕线程模块的简单包装可能是很好的解决方案.

换句话说,我想要的代码如下:

import CoolAsyncControl
CoolAsyncControl.call(self.doA, timeout = 10)
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 6

只要您在主线程中运行,就可以使用threading.Timer来调用thread.interrupt_maindoA.需要注意的是你想要的语法是不可能的,因为Python的(最喜欢的语言,除了如哈斯克尔)是"渴望" -不执行呼叫之前的论点完全是计算的,所以self.doA()会运行到结束之前call方法有任何机会做任何事情关于它!你将不得不使用一些语法,如

CoolIt.call(self.doA, args=(), timeout=100)
Run Code Online (Sandbox Code Playgroud)

这样call可以doA使用给定参数执行调用之前设置计时器.