Python解决指定代码段超时程序卡死
本文介绍Python中解决指定代码段运行超时导致程序卡死的两种主要方法。第一种利用eventlet模块进行内部超时控制,通过monkey_patch和Timeout上下文管理器实现;第二种使用func_timeout库装饰器限制函数执行时间。此外还提及通过jenkins插件进行外部控制的方式,帮助开发者防止因网页解析等耗时操作导致的程序阻塞。
Python解决指定代码段超时程序卡死
在近期的开发工作中,我遇到需要解析网页信息的场景。当网页数据量较大时,解析过程容易超时并最终失败,导致整个程序陷入卡死状态。针对这一问题,我找到了一种有效的解决方案。
具体的实现模板如下所示:
import eventlet
eventlet.monkey_patch()
flag_TimeOut = True
with eventlet.Timeout(40, False): # 设置超时时间为20秒
qualified = Qua.getQualifiedRate(all_url)
isPass = qualified.getPassRate()
flag_TimeOut = False
if flag_TimeOut:
print("程序超时!")关键点在于导入eventlet模块,利用该模块提供的功能来处理超时逻辑。关于该模块的具体函数用法,建议查阅相关官方文档或技术资料,此处主要提供一种可行的解决思路。
Python程序运行超过时长强制退出
为了防止程序因长时间运行而卡死,可以采取在指定时长后强制退出的策略;
主要包含以下两种实现方式:
1、在程序内部设置时长限制,超过设定时间则自动退出
import datetime
import time
import datetime
starttime = datetime.datetime.now()
#long running
endtime = datetime.datetime.now()
print (endtime – starttime).secondsimport datetime
import time
t1 = time.time()
t1 = time.localtime(t1).tm_hour
print(t1)
while 1:
if time.localtime(time.time()).tm_hour - t1<3:
print("@@@@",time.localtime(time.time()).tm_hour)
else:
print("break")
break
print("finsh")import time
import eventlet#导入eventlet这个模块
eventlet.monkey_patch()#必须加这条代码
with eventlet.Timeout(2,False):#设置超时时间为2秒
time.sleep(4)
print('没有跳过这条输出')
print('跳过了输出')func_timeout
from func_timeout import func_set_timeout
@func_set_timeout(5) # 设定函数执行时间
def task():
print('开始运行!')
time.sleep(6)
return '执行成功,未超时'
try:
task()
excpet:
print("---")2、通过程序外部进行控制,超时后强制退出
可以通过安装jenkins插件build-timeout来实现,安装完成后重启jenkins服务即可生效,插件下载地址为https://updates.jenkins.io/latest/build-timeout.hpi
- 设置
Absolute多少分钟没有结束则执行动作


以上为个人经验分享,希望能为大家提供参考,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









