本文完整示例代码及文件已上传至我的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命令时的持续阻塞问题。


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

最新文章

  1. MPI-2 并行IO的使用方法
  2. git 使用入门篇
  3. [WinAPI] API 12 [获取程序所在的目录、程序模块路径,获取和设置当前目录]
  4. Mina 中遇到SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
  5. 万网云解析设置二级域名解析到同IP不同端口
  6. wp 处理方法
  7. 十个顶级的C语言资源助你成为优秀的程序员
  8. Unity3D 之暂停和继续的实现
  9. DateTime用法二
  10. hdu2112 HDU Today
  11. MegCup 2017 极客挑战赛 初赛试题
  12. windows环境下,怎么解决无法使用ping命令
  13. CentOS7+mysql5.6配置主从
  14. Go 语言数组
  15. Android视频录制从不入门到入门系列教程(三)————视频方向
  16. Mysql授权root用户远程登录
  17. 阿里四不像Fourinone
  18. 使用Groovy的sql模块操作mysql进行多种查询
  19. 【算法python实现】 -- 最大子序和
  20. gradle 配置及设置本地仓库

热门文章

  1. 手把手教你学Dapr - 6. 发布订阅
  2. 菜鸡的Java笔记 第十九 - java 继承
  3. javaweb监听
  4. 卸载.net 5.0后使用dotnet提示Found .NET Core SDK
  5. Kubernetes:了解 Deployment
  6. 在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
  7. 莫比乌斯反演&各种筛法
  8. BZOJ3971 [WF2013]Матрёшка
  9. Docker Error response from daemon,Docker 换镜像
  10. Linux生产应用常见习题汇总