利用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. 假如你想在VUE的main.js里根据条件按需引入注册组件以及样式,那就这样子写,附赠自己写的vue一个框架配置多系统按需加载系统路由以及组件办法

    假如你想在VUE的main.js里根据条件按需引入注册组件以及样式,那就这样子写 举例来说我想要引入大屏的一些组件,但是原来框架已经集成了多个项目,路由也是按需加载的,想要实现组件按需加载 先在mai ...

  2. 【Redis场景3】缓存穿透、击穿问题

    场景问题及原因 缓存穿透: 原因:客户端请求的数据在缓存和数据库中不存在,这样缓存永远不会生效,请求全部打入数据库,造成数据库连接异常. 解决思路: 缓存空对象 对于不存在的数据也在Redis建立缓存 ...

  3. java进阶P-2.7

    类函数 函数 用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回:对某些特殊字符,如果字符(串)正好是正则的一部分,则需要转义才能使用 字符有 | , + , * , ^ , $ , ...

  4. RocketMQ Streams 1.1.0: 轻量级流处理再出发

    本文作者:倪泽,Apache RocketMQ committer.RSQLDB/RocketMQ Streams Maintainer 01 背景 RocketMQ Streams是一款基于Rock ...

  5. C#依赖注入(直白明了)讲解 一看就会系列

    最基础的:UI-BLL-DAL 这是我们耳熟能详的分层 (补充:)  我们的类正常都不是孤立存在的.很多都是要依赖于其它的类. 比如说我们有一个Work类,Work类在工作的时候需要把信息记录下来. ...

  6. Pytest插件pytest-repeat重复执行

    Pytest插件pytest-repeat重复执行 安装 pip install pytest-repeat doc https://pypi.org/project/pytest-repeat/ h ...

  7. DNA

    思路一: 这题需要桶+哈希(简化版像A 1  B  2 ......) 具体: 先把数据输入 再枚举可能的右端点,再由右端点得到左端点(l和r相差k) 在 l到r 区间内将这一段区间哈希成一个4进制数 ...

  8. mysql19-锁

    1.什么是锁 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性. ...

  9. Visual Studio增加Class类顶部签名描述信息

    1. 找到安装路径 默认在 C:\Program Files (x86)\Microsoft Visual Studio\,然后进入到2019\Professional\Common7\IDE\Ite ...

  10. .NET Core 日志记录程序和常用日志记录框架

    本文主要内容为.NET Core的日志记录程序和常使用的日志记录框架的简单使用 首先,打开VS2019新建一个ASP.NET Core Web Api项目,项目创建好后会有一个集成好的天气预报的类和控 ...