解决Python设置函数调用超时,进程卡住的问题

背景:

最近写的Python代码不知为何,总是执行到一半卡住不动,为了使程序能够继续运行,设置了函数调用超时机制。

代码:

import time
import signal

def test(i):
 time.sleep(i % 4)
 print "%d within time" % (i)
 return i

if __name__ == '__main__':
 def handler(signum, frame):
 raise AssertionError

for i in range(1, 10):
 try:
  signal.signal(signal.SIGALRM, handler)
  signal.alarm(3)
  test(i)
 except AssertionError:
  print "%d timeout" % (i)
 finally:
  signal.alarm(0)
  signal.signal(signal.SIGALRM, signal.SIG_DFL)

说明:

1、调用test函数超时监控,使用sleep模拟函数执行超时

2、引入signal模块,设置handler捕获超时信息,返回断言错误

3、alarm(3),设置3秒闹钟,函数调用超时3秒则直接返回

4、捕获异常,打印超时信息

程序执行结果:

1 within time
2 within time
3 timeout
4 within time
5 within time
6 within time
7 timeout
8 within time
9 within time

以上这篇解决Python设置函数调用超时,进程卡住的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python并发之多进程的方法实例代码

    一,进程的理论基础 一个应用程序,归根结底是一堆代码,是静态的,而进程才是执行中的程序,在一个程序运行的时候会有多个进程并发执行. 进程和线程的区别: 进程是系统资源分配的基本单位. 一个进程内可以包含多个线程,属于一对多的关系,进程内的资源,被其内的线程共享 线程是进程运行的最小单位,如果说进程是完成一个功能,那么其线程就是完成这个功能的基本单位 进程间资源不共享,多进程切换资源开销,难度大,同一进程内的线程资源共享,多线程切换资源开销,难度小 进程与线程的共同点: 都是为了提高程序运行效率,

  • Python中统计函数运行耗时的方法

    本文实例讲述了Python中统计函数运行耗时的方法.分享给大家供大家参考.具体实现方法如下: import time def time_me(fn): def _wrapper(*args, **kwargs): start = time.clock() fn(*args, **kwargs) print "%s cost %s second"%(fn.__name__, time.clock() - start) return _wrapper #这个装饰器可以在方便地统计函数运行的

  • Python装饰器限制函数运行时间超时则退出执行

    实际项目中会涉及到需要对有些函数的响应时间做一些限制,如果超时就退出函数的执行,停止等待. 可以利用python中的装饰器实现对函数执行时间的控制. python装饰器简单来说可以在不改变某个函数内部实现和原来调用方式的前提下对该函数增加一些附件的功能,提供了对该函数功能的扩展. 方法一. 使用 signal # coding=utf-8 import signal import time def set_timeout(num, callback): def wrap(func): def h

  • python 限制函数执行时间,自己实现timeout的实例

    如下所示: # coding=utf-8 import signal import time def set_timeout(num, callback): def wrap(func): def handle(signum, frame): # 收到信号 SIGALRM 后的回调函数,第一个参数是信号的数字,第二个参数是the interrupted stack frame. raise RuntimeError def to_do(*args, **kwargs): try: signal.

  • 解决Python设置函数调用超时,进程卡住的问题

    背景: 最近写的Python代码不知为何,总是执行到一半卡住不动,为了使程序能够继续运行,设置了函数调用超时机制. 代码: import time import signal def test(i): time.sleep(i % 4) print "%d within time" % (i) return i if __name__ == '__main__': def handler(signum, frame): raise AssertionError for i in ran

  • 解决Python图形界面中设置尺寸的问题

    Python有自己内置的标准GUI库--Tkinter,只要安装好Python就可以调用. 今天学习到了图形界面设计的问题,刚开始就卡住了.为啥呢?就是用geometry(size)设置窗口尺寸大小,如800X600,"X"从哪里来成了问题. 首先想到,这是个乘号,但是在程序中没有插入特殊符号这一说啊.所以,插入特殊符号的方法肯定不行了. 然后我心血来潮,从word的公式里复制了一个乘号过来(我也是服了我自己了),运行程序,可想而知,报错没商量. 看来求助外面是没用了.必须在Pytho

  • python如何解决指定代码段超时程序卡死

    目录 python解决指定代码段超时程序卡死 python程序运行超过时长强制退出 1.程序内部设置时长,超过退出 2.程序外部控制,超过强制退出 python解决指定代码段超时程序卡死 最近我写的一个程序中遇到了解析网页的代码,对于网页信息比较多的可能会超时,最后解析失败,程序卡死,于是我就找到了一个解决办法 大致模板如下: import eventlet eventlet.monkey_patch() flag_TimeOut = True with eventlet.Timeout(40,

  • php设置页面超时时间解决方法

    有时候我的页面因为网络卡,会一直转,我想是不是可以给页面设置一个超时时间,多久没反应就提示超时 比如php里的set_time_limit(300) 我想不是php页面也有个超时机制 ------解决思路---------------------- php 里不就是set_time_limit() 吗,你还可以设置php.ini中的max_execution_time来改变全局超时时间. ------解决思路---------------------- max_execution_time --

  • PIP安装python包出现超时问题的解决

    我们在使用pip默认源进行模块安装时,经常会超时问题导致不能下载.如图所示: 下面是解决方法-换源. 在自己电脑的C:\Users\25103\AppData\Roaming路径下新建pip.ini文件,在文件中写下如下内容: [global] timeout = 60000 index-url = https://pypi.tuna.tsinghua.edu.cn/simple 可更换的国内源有 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:h

  • 解决python线程卡死的问题

    1. top命令和日志方式判定卡死的位置 python代码忽然卡死,日志不输出,通过如下方式可以确定线程确实已经死掉了: # top 命令 top命令可以看到机器上所有线程的执行情况,%CPU和%MEM可以看出线程消耗的资源情况 由于机器上线程数量太多,可能要查看的线程的信息在top命令当前屏幕上显示不出来可以通过如下方式查看 在top命令下输入:u 接下来会提示输入用户名,就可以查看该用户所执行的所有线程 Which user (blank for all): denglinjie 这样就可以

  • 解决Python中定时任务线程无法自动退出的问题

    python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子线程. from threading import Timer def scheduletaskwrap(): pritn "in task" Timer(10, scheduletaskwrap).start() Timer(10, scheduletaskwrap).start() 象

  • python设置代理和添加镜像源的方法

    为什么要修改镜像源? 一般使用python安装库,会用到pip install xxx 指令或者conda install xxx指令,因为pip和conda默认国外镜像源,这时会在Python的官方源pypi.python.org/pypi 下载,速度很慢,有时会因为超时会抛异常无法下载成功,所以可以选择一些比较稳定速度比较快的国内镜像来下载python库,可以显著加快模块安装速度. 为什么要设置代理? 当计算机被限制上网时(公司安全考虑)就不能连外网了,此时需要设置代理来解决:通常公司要求通

  • 在 Linux/Mac 下为Python函数添加超时时间的方法

    我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做 timeout ,就是指在网络请求发出开始计算,如果超过 timeout 还没有收到返回,就抛出超时异常.(当然存在特殊情况timeout 会失效,请看Timeouts and cancellation for humans* 这篇文章中作者的举例,我们不考虑这种特殊情况). 但大家有没有考虑过,如何为普通的函数设置超时时间?特别是在运行一些数据处理.AI 相关的代码时,某个函数可能会运行很长时间,我们想实现,在函数

  • 解决Python pip 自动更新升级失败的问题

    在使用python pip的时候,经常会发生pip版本过低导致失败的情况,这时候,系统会提示让你使用如下命令对pip进行升级更新: python -m pip install --upgrade pip 但这种更新方式,经常会出现错误,如下所示 多尝试几次,依旧还是显示错误,更新失败,那么该如何解决这个问题. 解决方案-使用以下命令: python -m pip install -U --force-reinstall pip 即可完美解决这种出错,更新示例如下 希望能帮到碰上同样问题的朋友.

随机推荐