最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python防止程序超時的實現(xiàn)示例

 更新時間:2023年08月24日 15:21:28   作者:夢想鬧鐘  
因為某個需求,需要在程序運行的時候防止超時,本文主要介紹了python防止程序超時的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下

因為某個需求,需要在程序運行的時候防止超時。在網(wǎng)上搜了以下發(fā)現(xiàn)有3種方法

1.@func_set_timeout這個注解

實測可以用,但是用起來比較麻煩,因為這個超時后會跑出異常,可以直接注解在函數(shù)上但不能注解在單條語句上,我設(shè)想的是把超時和異常同時處理,這個會拋出新的異常不太符合我的需求

# func_set_timeout作為裝飾器使用,來作為目標(biāo)函數(shù)的超時處理方式
import time
import os
from func_timeout import func_set_timeout
@func_set_timeout(5)
def my_test(name):
    print('子進(jìn)程運行中,name={},pid={}'.format(name, os.getpid()))
    time.sleep(4)			
    print('子進(jìn)程已經(jīng)結(jié)束')
if __name__ == '__main__':
    print('父進(jìn)程:{}'.format(os.getpid()))
    try:
        p = Process(target=my_test, args=('test', ))
        p.start()
    except TimeoutError as e:
        print('子程序超時')

2.多進(jìn)程/多限制的.join

比如下面的代碼

import time
import threading
def worker():
    print('worker start')
    time.sleep(10)
    print('worker end')
t = threading.Thread(target=worker)
t.start()
# 等待線程結(jié)束,不能超過5秒
t.join(5)
if t.is_alive():
    print('worker overtime')
else:
    print('worker finished')

實測發(fā)現(xiàn)運行結(jié)果是這樣,到了5秒提示overtime但是程序繼續(xù)運行,然后到了10秒程序運行結(jié)束,雖然有超時的效果但是和我設(shè)想的還是有區(qū)別,我想的是時間到了你就別繼續(xù)運行了

3.使用eventlet.Timeout來實現(xiàn)

實測下來這個是最符合我需求的,時間到了直接跳出,加一個timeout的變量就能知道是否超時了。美中不足就是必須加一條語句,eventlet.monkey_patch(),簡單搜索了下發(fā)現(xiàn)這個屬于程序在運行時動態(tài)對已有代碼進(jìn)行修改,而不需要修改原始代碼的一個熱補丁。

使用了eventlet后,同時處理超時和異常的代碼如下

"""
用于處理函數(shù)超時的情況,同時記錄程序異常
"""
import eventlet
class PyTimer:
    """
    用于在處理異常的同時防止程序超時
    """
    def __init__(self, max_time=5):
        """
        初始化
        """
        # 必須有這條代碼
        eventlet.monkey_patch()
        self.errors = ""
        # 最大超時的秒數(shù)
        self.max_time = max_time
    def set_max_time(self,new_time):
        """
        設(shè)置新的超時秒數(shù)
        """
        self.max_time=new_time
    def count_time(self, function, *args):
        """
        運行函數(shù),記錄異常,同時超時跳出
        """
        return_result = None
        timeout = True
        current_error = ""
        try:
            with eventlet.Timeout(self.max_time, False):  # 設(shè)置超時時間為5秒
                return_result = function(*args)
                timeout = False
        except Exception as e:
            current_error = str(e) + "\n"
        finally:
            if timeout:
                current_error += function.__name__ + "超時\n"
                print(current_error)
                self.errors += current_error
            return return_result
    def get_errors(self):
        """
        獲取報錯信息
        """
        return self.errors
if __name__ == '__main__':
    def long_fun(a, b):
        import time
        print(a, b)
        time.sleep(20)
    my_timer = PyTimer()
    my_timer.count_time(long_fun, 1, 2)

到此這篇關(guān)于python防止程序超時的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)python防止程序超時內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • 使用Python進(jìn)行自動化部署詳解

    使用Python進(jìn)行自動化部署詳解

    在軟件開發(fā)和運維領(lǐng)域,自動化部署是一個至關(guān)重要的環(huán)節(jié),本文將介紹如何使用Python進(jìn)行自動化部署,并提供代碼實例來說明,希望對大家有所幫助
    2024-04-04
  • Python Flask框架開發(fā)之運用SocketIO實現(xiàn)WebSSH方法詳解

    Python Flask框架開發(fā)之運用SocketIO實現(xiàn)WebSSH方法詳解

    Socket.IO本是一個面向?qū)崟rweb應(yīng)用的JavaScript庫,現(xiàn)在已成為擁有眾多語言支持的Web即時通訊應(yīng)用的框架。這篇文章主要介紹了Python 運用SocketIO實現(xiàn)WebSSH方法
    2022-10-10
  • 深入解析Python中的list列表及其切片和迭代操作

    深入解析Python中的list列表及其切片和迭代操作

    這篇文章主要介紹了Python中的列表及其切片和迭代操作,文中還對tuple元組作了介紹,需要的朋友可以參考下
    2016-03-03
  • Python計時相關(guān)操作詳解【time,datetime】

    Python計時相關(guān)操作詳解【time,datetime】

    這篇文章主要介紹了Python計時相關(guān)操作,涉及time,datetime模塊的使用技巧,包括時間戳、時間差、日期格式等操作方法,需要的朋友可以參考下
    2017-05-05
  • 12步入門Python中的decorator裝飾器使用方法

    12步入門Python中的decorator裝飾器使用方法

    裝飾器的運用是Python編程中的一項高級技巧,這里我們由淺入深,整理了12步入門Python中的decorator裝飾器使用方法,需要的朋友可以參考下
    2016-06-06
  • Python中元組,列表,字典的區(qū)別

    Python中元組,列表,字典的區(qū)別

    Python中,有3種內(nèi)建的數(shù)據(jù)結(jié)構(gòu):列表、元組和字典。那么他們之間有哪些區(qū)別呢?下面小編給大家?guī)砹薖ython中元組,列表,字典的區(qū)別,需要的朋友參考下吧
    2017-05-05
  • Python讀取properties配置文件操作示例

    Python讀取properties配置文件操作示例

    這篇文章主要介紹了Python讀取properties配置文件操作,結(jié)合實例形式分析了Python讀取properties配置文件操作中增加對鍵值對支持與使用的相關(guān)技巧,需要的朋友可以參考下
    2018-03-03
  • Pycharm搭建一個Django項目的方法步驟

    Pycharm搭建一個Django項目的方法步驟

    本文主要介紹了Pycharm搭建一個Django項目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python實現(xiàn)將橫表和縱表任意轉(zhuǎn)換的兩種方法

    Python實現(xiàn)將橫表和縱表任意轉(zhuǎn)換的兩種方法

    在日常做數(shù)據(jù)分析,接收到最多的表格是縱表,每個字段變量都有很長數(shù)據(jù)的長表,我們稱之為縱向數(shù)據(jù),但是,有時候,我們也會遇到橫表,對于橫向數(shù)據(jù),我們會數(shù)據(jù)轉(zhuǎn)化,將其轉(zhuǎn)化為縱向數(shù)據(jù),感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-12-12
  • PyCharm無法識別PyQt5的2種解決方法,ModuleNotFoundError: No module named ''pyqt5''

    PyCharm無法識別PyQt5的2種解決方法,ModuleNotFoundError: No module named

    這篇文章主要介紹了PyCharm無法識別PyQt5的兩種解決辦法,ModuleNotFoundError: No module named 'pyqt5',需要的朋友可以參考下
    2020-02-02

最新評論

买车| 深水埗区| 航空| 碌曲县| 铜川市| 甘谷县| 万安县| 凉山| 彭州市| 吉木乃县| 遂平县| 博客| 新闻| 舞钢市| 米泉市| 根河市| 石嘴山市| 桑日县| 交城县| 枞阳县| 辽阳县| 丰宁| 海淀区| 和林格尔县| 广灵县| 高台县| 阿勒泰市| 丘北县| 盱眙县| 浦东新区| 青河县| 蓝田县| 利辛县| 玉门市| 盐城市| 祁连县| 台中市| 平和县| 石泉县| 肇源县| 孟村|