本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills

  这是我的系列文章「Python实用秘技」的第2期,本系列立足于笔者日常工作中使用Python辅助办公的心得体会,每一期为大家带来一个3分钟即可学会的简单小技巧。

  作为系列第2期,我们即将学习的是:为Python函数添加执行超时检查功能

  某些常用的库如requestsget()函数,具有特定的参数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命令时的持续阻塞问题。


  本期分享结束,咱们下回见~

「Python实用秘技02」给Python函数定“闹钟”的更多相关文章

  1. 「Python实用秘技05」在Python中妙用短路机制

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第5期 ...

  2. 「Python实用秘技11」在Python中利用ItsDangerous快捷实现数据加密

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第11 ...

  3. 「Python实用秘技01」复杂zip文件的解压

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的新系列文章「Python实用秘技」的第1 ...

  4. 「Python实用秘技03」导出项目的极简环境依赖

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第3期 ...

  5. 「Python实用秘技04」为pdf文件批量添加文字水印

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第4期 ...

  6. 「Python实用秘技06」逐行监听Python程序的内存消耗

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第6期 ...

  7. 「Python实用秘技07」pandas中鲜为人知的隐藏排序技巧

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第7期 ...

  8. 「Python实用秘技08」一行代码解析地址信息

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第8期 ...

  9. 「Python实用秘技09」更好用的函数运算缓存

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第9期 ...

随机推荐

  1. Git知识总结

    Git知识总结 Git安装 windows 在git官网中下载安装程序,然后按默认选项安装即可 安装完成后,在开始菜单里找到"Git"->"Git Bash&quo ...

  2. ES6基础知识(Generator 函数)

    1.next().throw().return() 的共同点 next().throw().return()这三个方法本质上是同一件事,可以放在一起理解.它们的作用都是让 Generator 函数恢复 ...

  3. [bzoj4094]Optimal Milking

    建立线段树,维护区间左端点选/不选,右端点选/不选且不含有相邻两个同时选的最大值,合并时注意细节即可 1 #include<bits/stdc++.h> 2 using namespace ...

  4. [atAGC027D]Modulo Matrix

    对网格图黑白染色,在黑色格中填不同的质数,白色格中填相邻黑色格的lcm+1,但这样会超过1e15的上限将网格图划分为两类对角线,每一条对角线选一个质数,然后每一个点就是两条对角线的质数相乘,而白格的值 ...

  5. [loj2494]寻宝游戏

    将$n+1$个数字(还有0)标号为$[0,n]$,那么定义$a_{i,j}$表示第j个数上第i位上的值,如果第$i-1$个数与第$i$个数之间的运算符为与,那么令$b_{i}=1$,否则$b_{i}= ...

  6. CSS动画--让div动起来

    CSS动画 今天在写代码时候,遇到了css动画效果如何实现的问题,经过查阅和实践,总结出一下结论. transition transition 指定动画变化的对应属性 以及动画的执行时间. 例如:tr ...

  7. IEnumerator vs Iterator

    IEnumerator vs Iterator IEnumerator 不考虑Reset方法和原始列表的可变性,NoveNext和Current的只读向前用法: Initially, the enum ...

  8. Java设计模式之(十二)——观察者模式

    1.什么是观察者模式? Define a one-to-many dependency between objects so that when one object changes state, a ...

  9. JavaSE复习巩固

    第二天:复习if语句,扫描器,switch语句,循环语句 1.if语句---流程控制语句 if之前学的语句是顺序结构 1.1 单个if的语法结构 if(条件判断){ 满足条件需要做的事情: } int ...

  10. postman自动调用获取token

    Postman不光支持单次请求,还支持环境变量.全局变量.集合变量 本文使用Collection Variable Collection 如下图可以点击Collection然后可以添加请求和文件夹,以 ...