「Python实用秘技02」给Python函数定“闹钟”
本文完整示例代码及文件已上传至我的
Github
仓库https://github.com/CNFeffery/PythonPracticalSkills
这是我的系列文章「Python实用秘技」的第2期,本系列立足于笔者日常工作中使用Python
辅助办公的心得体会,每一期为大家带来一个3分钟即可学会的简单小技巧。
作为系列第2期,我们即将学习的是:为Python函数添加执行超时检查功能
。

某些常用的库如requests
的get()
函数,具有特定的参数timeout
,设置后可以在其运行超过一定时间还没运行完成时抛出超时错误。
而如果我们想为自定义函数也添加类似的“闹钟”超时检查功能,最简单的方式是使用第三方库wrapt_timeout_decorator
中的timeout()
装饰器,通过参数传递超时时长(单位:秒)即可,下面是一个简单的例子:
from wrapt_timeout_decorator import timeout
@timeout(5) # 设置超时时长为5秒
def demo_func(seconds: float) -> float:
# 此处time在函数中导入是为了绕开jupyter中wrapt_timeout_decorator与time模块的特殊错误
# 详见https://github.com/bitranox/wrapt_timeout_decorator/issues/24
import time
time.sleep(seconds)
return seconds
# 未超时时正常运行
demo_func(3)
# 超时报错
demo_func(6)

并且不只是函数,类中的静态方法亦可使用:
class Demo:
@timeout(5) # 设置超时时长为5秒
@staticmethod
def demo_func(seconds: float) -> float:
# 此处time在函数中导入是为了绕开jupyter中wrapt_timeout_decorator与time模块的特殊错误
# 详见https://github.com/bitranox/wrapt_timeout_decorator/issues/24
import time
time.sleep(seconds)
return seconds
demo = Demo()
demo.demo_func(3)
Demo().demo_func(6)

使用场景非常之多,譬如前不久笔者就用它来解决fabric
模拟执行nohup
命令时的持续阻塞问题。
本期分享结束,咱们下回见~👋
作者:Feffery
出处:https://www.cnblogs.com/feffery/p/15676516.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
标签:
Python实用秘技
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-12-11 (数据科学学习手札100)搞定matplotlib中的字体设置