利用signal模块,可以给函数设置一个超时时间(精确到秒),结合装饰器实现:超时时间内函数运行完成正常退出,超时时间内函数未运行完成则抛出Timeout异常。

 1 # coding:utf8
2 import time
3 import signal
4
5
6 # 自定义超时异常
7 class TimeoutError(Exception): pass
8
9 # 超过超时时间,调用此函数
10 def handler(signum, frame):
11 raise TimeoutError()
12
13 # 函数超时装饰器
14 def time_out(interval, doc):
15 def decorator(func):
16 def wrapper(*args, **kwargs):
17 try:
18 signal.signal(signal.SIGALRM, handler)
19 signal.alarm(interval) # interval秒后向进程发送SIGALRM信号
20 result = func(*args, **kwargs)
21 signal.alarm(0) # 函数在规定时间执行完后关闭alarm闹钟
22 return result
23 except TimeoutError as e:
24 # 捕获到超时异常,要做的事情
25 print("The function failed to run due to timeout, func:<%s>" % doc)
26 return wrapper
27 return decorator
28
29 @time_out(1, "demo.py中task1函数")
30 def task1():
31 print("task1 start")
32 time.sleep(1.2)
33 print("task1 end")
34
35
36 @time_out(1, "demo.py中task2函数")
37 def task2():
38 print("task2 start")
39 time.sleep(0.8)
40 print("task2 end")
41
42
43 if __name__ == "__main__":
44 task1()
45 task2()
46
47
48 # task1 start
49 # The function failed to run due to timeout, func:<demo.py中task1函数>
50 # task2 start
51 # task2 end

python利用signal自定义函数超时机制的更多相关文章

  1. python学习之--自定义函数:

    Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...

  2. python怎么导入自定义函数

    python 编程中经常需要调用自己定义的函数,在大型程序中自定义的函数一般会和main函数分开,这么主要讲下在不同文件下定义的函数怎么调用: 首先在有文件夹test_python文件夹下有main. ...

  3. Python基础(二)自定义函数

    1.判断字符串,内容是否为数字 我们用python:xlrd读Excel内容时,本来只是输入的整数字,经常读出来的是float类型 我们需要自动转成整型,意思就是说,读出来的和我们输入的一样,但是,我 ...

  4. python 基础篇 自定义函数

    多态 我们可以看到,Python 不用考虑输入的数据类型,而是将其交给具体的代码去判断执行,同样的一个函数(比如这边的相加函数 my_sum()),可以同时应用在整型.列表.字符串等等的操作中. 在编 ...

  5. 五,Smarty模板技术/引擎——自定义函数机制

    自建函数是smarty提供的函数,不允许修改,只能被调用: 自定义函数是自己编写函数,注册成为smarty的函数,之后可以被调用: 示例:使用smarty自定义函数的机制,编写一个函数myfun1,通 ...

  6. Python学习教程(learning Python)--2.1 Python下自定义函数

    在Python里可以自定义函数,实现某特定功能,这里首先要区分一下函数的定义和函数的调用两个基本概念,初学者往往容易混淆. 函数的定义是指将一堆能实现特定功能的语句用一个函数名标识起来,而函数的调用则 ...

  7. python的自定义函数

    今天想把上次参考着网上教程写的scrapy爬虫改写成requests和beautifulsoup的普通爬虫,写着写着发现自己对python的自定义函数还不是太熟悉(自己TCL了.........流泪) ...

  8. Mqtt paho 回调函数触发机制跟踪

    Python Mqtt paho 回调函数触发机制跟踪,我使用的是 buildroot 里面的 mqtt paho , 代码在 ''' buildroot-2017.02.8/output/build ...

  9. Python中关于Lambda函数的使用总结

    lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的 ...

  10. python调用函数设置超时机制

    有时候需要给函数设置超时机制,以防止它卡住我们的程序,这里可以用python的signal模块,signal模块可以实现程序内部的信号处理. # coding:utf8 import time imp ...

随机推荐

  1. 字符串拼接输出-Predicate接口

    字符串拼接输出 下面的字符串数组当中存有多条信息,请按照格式""\姓名∶XX.性别:xx."的格式将信息打印出来.要求将打印姓名的动作作为第一个Consumer 接口的L ...

  2. ssh 连接 wsl2

    修改ssh相关config https://cloud.tencent.com/developer/article/1538305 其中,端口可以设置成 2222 以防万一 然后在wsl 中执行如下命 ...

  3. Java最全八股文(2023最新整理)

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  4. python爬虫学习——元组,字典(2.14日博客补)

    元组 ''' tup1 = () #创建一个空的元组 print(type(tup1)) #tup2 = (50) #不是元组,python把括号当成了表达式的一部分,即数学运算的括号 #tup2 = ...

  5. ubuntu18.04编译webrtc_android库

    webrtc 是谷歌提供的音视频通讯方案, 能够很好的解决音视频互联互通的场景. 本文基于 Ubuntu 18.04 编译 android 版本的过程, 其它平台也可以参考, 基本都大同小异. 编译环 ...

  6. JZOJ 4213. 【五校联考1day2】对你的爱深不见底

    题目 思路 结论题,我不会证明: 找到第一个 \(|S_n| \leq m + 1\),那么答案就是 \(m - |S_{n-2}|\) 证明?我说了我不会,就当结论用吧 这已经很恶心了 然而这题还要 ...

  7. windows server backup 无法使用或wbadmin.msc致命错误解决方法

    因为黑群辉断电无法自动引导进系统,我也找不到很好的办法,所以决定使用windows server来做NAS服务器,虽然都解决了内网穿透的问题,但是数据安全还在找方案,目前已经解决: 1.购买了一张pc ...

  8. 都在用 AI 生成美少女,而我却。。。

    最近 AI 画画特别的火,你能从网上看到非常多好看的图片,于是我就开始了我的安装之旅,我看到的图是这样的. 这样的. 还有这样的. 然后我就开始了我的 AI 安装生成计划. 安装环境 首先我们需要安装 ...

  9. Blender插件:水滴生成器(Droplet Generator)

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链. 原文地址:https://www.mvrlink.com/droplet-generator/ 1.官方介绍: 适用于Blender 3.1及更 ...

  10. vue的数据更新视图不同步的处理用Vue.$set()

    // vue的数据更新视图不同步的处理用Vue.$set() // 通过Vue.set方法设置data属性vm.$set(最终值,数组索引,数组值) ==Vue.$set(arr,index,val) ...