python利用signal自定义函数超时机制
利用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自定义函数超时机制的更多相关文章
- python学习之--自定义函数:
Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...
- python怎么导入自定义函数
python 编程中经常需要调用自己定义的函数,在大型程序中自定义的函数一般会和main函数分开,这么主要讲下在不同文件下定义的函数怎么调用: 首先在有文件夹test_python文件夹下有main. ...
- Python基础(二)自定义函数
1.判断字符串,内容是否为数字 我们用python:xlrd读Excel内容时,本来只是输入的整数字,经常读出来的是float类型 我们需要自动转成整型,意思就是说,读出来的和我们输入的一样,但是,我 ...
- python 基础篇 自定义函数
多态 我们可以看到,Python 不用考虑输入的数据类型,而是将其交给具体的代码去判断执行,同样的一个函数(比如这边的相加函数 my_sum()),可以同时应用在整型.列表.字符串等等的操作中. 在编 ...
- 五,Smarty模板技术/引擎——自定义函数机制
自建函数是smarty提供的函数,不允许修改,只能被调用: 自定义函数是自己编写函数,注册成为smarty的函数,之后可以被调用: 示例:使用smarty自定义函数的机制,编写一个函数myfun1,通 ...
- Python学习教程(learning Python)--2.1 Python下自定义函数
在Python里可以自定义函数,实现某特定功能,这里首先要区分一下函数的定义和函数的调用两个基本概念,初学者往往容易混淆. 函数的定义是指将一堆能实现特定功能的语句用一个函数名标识起来,而函数的调用则 ...
- python的自定义函数
今天想把上次参考着网上教程写的scrapy爬虫改写成requests和beautifulsoup的普通爬虫,写着写着发现自己对python的自定义函数还不是太熟悉(自己TCL了.........流泪) ...
- Mqtt paho 回调函数触发机制跟踪
Python Mqtt paho 回调函数触发机制跟踪,我使用的是 buildroot 里面的 mqtt paho , 代码在 ''' buildroot-2017.02.8/output/build ...
- Python中关于Lambda函数的使用总结
lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的 ...
- python调用函数设置超时机制
有时候需要给函数设置超时机制,以防止它卡住我们的程序,这里可以用python的signal模块,signal模块可以实现程序内部的信号处理. # coding:utf8 import time imp ...
随机推荐
- Redis缓存的主要异常及解决方案
作者:京东物流 陈昌浩 1 导读 Redis 是当前最流行的 NoSQL数据库.Redis主要用来做缓存使用,在提高数据查询效率.保护数据库等方面起到了关键性的作用,很大程度上提高系统的性能.当然在使 ...
- MyBatis使用四(查询详解)
本文主要讲述如何在mybatis中进行查询操作[详解] 一. 查询User对象 1.查询单个对象User SelectUser接口声明如下 // 主要条件是使用id public interface ...
- 【C++ 泛型编程01:模板】函数模板与类模板
[模板] 除了OOP外,C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 函数模板 函数模板作用 建立一个通用函数,其函数返回值类型和形参类型可以 ...
- 文献阅读01:由I类HLA转录缺失导致的联合免疫治疗的获得性癌症耐药性
背景 Merkel cell carcinoma:梅克尔细胞癌又名皮肤小梁状癌.原发性皮肤神经内分泌癌.皮肤原发性小细胞癌及皮肤APUD瘤. HLA:MHC基因产物在不同细胞表面表达,通常称之为MHC ...
- 编程哲学之 C# 篇:003——为什么选择 C#
国内开设C#课程的学校或培训机构是越来越少,使用C#作为开发的语言企业也是越来越少.企业要招C#的开发人员越来越难,会C#的要开发人员要找工作也是越来越难,然后我还是选择C#作为本系列的主要语言,我给 ...
- drf-restful规范、django原生编写接口
1.restful规范 REST全称是Representational State Transfer,中文意思是表述:表征性状态转移,它首次出现在2000年Roy Fielding的博士论文中.RES ...
- WPF 使用动画绘制一个点赞大拇指
效果图 好久没有写wpf了. 最近看到飞书的点赞动画非常有意思,决定试试,虽然不及飞书那样的绚丽,但是练手还是可以的,希望自己的手艺还在! 那么如何写一个这样的动画呢? 首先需要刨析这个动画的构成: ...
- spring cloud alibaba - Nacos 作为配置中心基础使用
1.简要说明 Nacos提供了作为配置中心的功能,只需要在Nacos的控制台页面添加配置,然后在项目中配置相应的"路径"就好. 主要分为几个步骤: 在Nacos控制台添加配置 在项 ...
- 《Terraform 101 从入门到实践》 Terraform在公有云Azure上的应用
<Terraform 101 从入门到实践>这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看. 简介 Azure是微软的公有 ...
- go 神奇的错误 time.Now().Format("2006-01-02 13:04:05") 比北京时间大8小时
困倦的时候写了个个获取本地时间,打印总比当前时间大8小时,找了很久原因 package main import ( "fmt" "time" ) func ma ...