栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python遇到执行超时如何跳过避免任务卡死

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python遇到执行超时如何跳过避免任务卡死

近期有同事反馈数据后台任务长时间等待,经过排查是爬虫中有一段下载附件和图片的代码导致的,下载任务是遍历执行的,当碰到几十兆的超大附件时,下载时间超长,导致后面的任务一直等待。查明原因有了大致思路,开两个线程去控制,一个线程下载附件,另一个线程计时,当下载附件的线程超过时间就标记任务并continue,遍历执行其他任务,本着不重复造轮子的思想,找了现成的插件——eventlet

eventlet是一个用于python的并发网络库,它使用epoll或libevent实现高度可伸缩的非阻塞i/o。eventlet有个绿色线程(eventlet.green.thread)的概念,可以人为的设置使其互相让渡CPU控制权,我用了一下方法临时解决了超时问题。
eventlet.monkey_patch():在运行时动态修改已有的代码,而不需要修改原始代码
eventlet.Timeout():如果标志为True将立即返回,否则阻塞线程至等待阻塞状态。

示例代码如下:

def timeOutTest():
    workDone = False
    eventlet.monkey_patch()  # 必须加这条代码
    with eventlet.Timeout(2, False):  # 设置超时时间为2秒
        print '这条语句正常执行'
        doSomeWork()
        print '没有跳过这条输出'
        workDone = True
    print '跳过了输出'
    if workDone:
        print "work is done"
    else:
        print "work is not done"

def doSomeWork():
    time.sleep(10)

timeOutTest()

输出结果:

这条语句正常执行
跳过了输出
work is not done
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835445.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号