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

python程序超時處理方式

 更新時間:2023年08月17日 15:10:02   作者:何小義的AI進階路  
這篇文章主要介紹了python程序超時處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

python程序超時處理

下面這個小案例,實現(xiàn)對某個函數(shù)超時處理:

其實就是加了一個裝飾器timeout

import time
import timeout_decorator
@timeout_decorator.timeout(6)
def justtest():
    time.sleep(5)
    return 5
aaa = justtest()
print aaa

上面代碼我們規(guī)定若函數(shù)運行時間超過6s  就報錯。

5s是可以的,所以正常運行,運行結(jié)果:

如果我們設定程序不可超過3s,

import time
import timeout_decorator
@timeout_decorator.timeout(3)
def justtest():
    time.sleep(5)
    return 5
aaa = justtest()
print aaa

運行結(jié)果:

python超時處理方法介紹,Eventlet 和 func-timeout

有一些場景,需要我們控制程序或者腳本的運行時間。 

  • 自動化用例中的某一個步驟需要在規(guī)定時間內(nèi)完成才算有效;    
  • 使用線程池控制線程運行時,我們不希望每個線程運行時間超過某一值;    
  • 在爬蟲時發(fā)送的request請求,我們希望在規(guī)定時間內(nèi)無響應則跳過該請求;    
  • 當寫入了一條錯誤的sql查詢語句可能會導致該查詢語句一直運行,導致其他查詢語句阻塞時等等場景

以上場景中,如果我們在程序中設置了超時處理,那將會為我們的程序節(jié)約很多運行時間。

1.eventlet

安裝: 

pip install eventlet

eventlet在代碼中的使用:

import time
import eventlet                     # 導入eventlet模塊
eventlet.monkey_patch()             # 引入patch
with eventlet.Timeout(3, False):    # 設置超時時間3秒
    time.sleep(4)                   # 等待4秒
    print('結(jié)果1')                   # 因為等待了4秒,大于超時時間,所以'結(jié)果1‘不打印
print('結(jié)果2')
# 運行以上程序輸出:
# 結(jié)果2
with eventlet.Timeout(3, False):    # 設置超時時間3秒
    time.sleep(2)                   # 等待2秒
    print('結(jié)果3')                   # 因為等待了2秒,小于超時時間,所以'結(jié)果3‘也會打印
print('結(jié)果4')
# 運行以上程序輸出:
# 結(jié)果3
# 結(jié)果4

注意:eventlet方法中只要進行了子進程的調(diào)用,超時設置就會失效。示例:

import time
import os
import eventlet                     # 導入eventlet模塊
from multiprocessing import Process
def my_test(name):
    print('子進程運行中,name={},pid={}'.format(name, os.getpid()))
    time.sleep(10)
    print('子進程已經(jīng)結(jié)束')
if __name__ == '__main__':
    eventlet.monkey_patch()                                 # 引入patch
    with eventlet.Timeout(3, False):                        # 這里設置了超時時間3
        print('父進程:{}'.format(os.getpid()))
        p = Process(target=my_test, args=('test', ))        # 調(diào)用了子進程,子進程內(nèi)有等待10秒的步驟,等待完才會打印'子進程已經(jīng)結(jié)束‘
        print('子進程準備執(zhí)行---')
        p.start()
# 執(zhí)行以上程序輸出:
# 父進程:11548
# 子進程準備執(zhí)行 - --
# 子進程運行中,name = test,pid = 1996
# 子進程已經(jīng)結(jié)束

從以上示例可以看出,設置的超時時間3秒沒有生效。這種情況,我們只能將超時處理步驟加到my_test函數(shù)中即可:

def my_test(name):
    print('子進程運行中,name={},pid={}'.format(name, os.getpid()))
    eventlet.monkey_patch()                                 # 引入patch
    with eventlet.Timeout(3, False):
        time.sleep(10)
        print('等待時間結(jié)束')
    print('子進程已經(jīng)結(jié)束')

2.func-timeout

安裝:

pip install func-timeout

func-timeout 在代碼中的使用,func-timeout主要有兩中方法:func_timeout,func_set_timeout

2.1 func_set_timeout 用法

# func_set_timeout作為裝飾器使用,來作為目標函數(shù)的超時處理方式
import time
import os
from func_timeout import func_set_timeout
@func_set_timeout(5)
def my_test(name):
    print('子進程運行中,name={},pid={}'.format(name, os.getpid()))
    time.sleep(4)			
    print('子進程已經(jīng)結(jié)束')
if __name__ == '__main__':
    print('父進程:{}'.format(os.getpid()))
    try:
        p = Process(target=my_test, args=('test', ))
        p.start()
    except TimeoutError as e:
        print('子程序超時')
# 執(zhí)行以上程序輸出:
# 父進程:29908
# 結(jié)束
# 子進程運行中,name=test,pid=40280
# 子進程已經(jīng)結(jié)束
# 說明:my_test函數(shù)執(zhí)行需要4s,設置的超時時間大于4s,因此子進程正常執(zhí)行;若設置my_test函數(shù)執(zhí)行時間大于5s,則報錯,代碼中嘗試了通過捕獲異常來讓程序正常運行退出,但超時異常時發(fā)生在子進程中的,因此捕獲異常失敗,此時的報錯見圖1。

圖1:

2.2 func_timeout 用法

import time
import os
from func_timeout import func_timeout
from func_timeout import FunctionTimedOut
def my_test(name):
    print('進程運行中,name={},pid={}'.format(name, os.getpid()))
    time.sleep(6)
    print('進程已經(jīng)結(jié)束')
if __name__ == '__main__':
    try:
        func_timeout(3, my_test, args=('test', ))
    except FunctionTimedOut as e:
        print(e)
        print('進程運行超時')
# 輸出:
# 進程運行中,name=test,pid=3364
# Function my_test (args=('test',)) (kwargs={}) timed out # after 3.000000 seconds.
# 進程運行超時
# 說明:func_timeout()第一個參數(shù)為超時時間,第二個參數(shù)是調(diào)用的函數(shù),注意這里只調(diào)用函數(shù)名,沒有(), 第三個參數(shù)是調(diào)用函數(shù)的參數(shù)。這里使用的異常捕獲也不能解決2.1中的報錯問題。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python自動化辦公實戰(zhàn)案例詳解(Word、Excel、Pdf、Email郵件)

    Python自動化辦公實戰(zhàn)案例詳解(Word、Excel、Pdf、Email郵件)

    這篇文章基于Python自動化辦公,主要介紹了使用Python相關庫,依次完成Word文檔替換、Excel表格讀取、Pdf文件生成和Email自動郵件發(fā)送任務。感興趣的小伙伴可以跟隨小編一起學習一下
    2021-12-12
  • Python while循環(huán)的基本用法與終止條件

    Python while循環(huán)的基本用法與終止條件

    本章詳細介紹了Python中的while循環(huán)的基本用法與終止條件,包括其重要性應用場景技術原理實現(xiàn)方法關鍵技術點等進階示例常見問題與解決方案最佳實踐等內(nèi)容最后總結(jié)了核心要點并提供思考題一步驟建議和延伸閱讀建議,需要的朋友可以參考下
    2026-05-05
  • Python實現(xiàn)數(shù)據(jù)可視化圖表生成(適合新手入門)

    Python實現(xiàn)數(shù)據(jù)可視化圖表生成(適合新手入門)

    在數(shù)據(jù)科學和數(shù)據(jù)分析的新時代,高效、直觀的數(shù)據(jù)可視化工具顯得尤為重要,下面這篇文章主要介紹了Python實現(xiàn)數(shù)據(jù)可視化圖表生成的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-08-08
  • python selenium登錄豆瓣網(wǎng)過程解析

    python selenium登錄豆瓣網(wǎng)過程解析

    這篇文章主要介紹了python selenium登錄豆瓣網(wǎng)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python學習教程之常用的內(nèi)置函數(shù)大全

    Python學習教程之常用的內(nèi)置函數(shù)大全

    python給我們提供了很多已經(jīng)定義好的函數(shù),下面這篇文章主要給大家介紹了關于Python學習教程之一些常用的內(nèi)置函數(shù),文中分享了關于數(shù)學函數(shù)、功能函數(shù)、類型轉(zhuǎn)換函數(shù)、字符串處理和序列處理函數(shù)的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • 基于Python實現(xiàn)浪漫的彈窗祝福滿屏飄字效果(附完整代碼)

    基于Python實現(xiàn)浪漫的彈窗祝福滿屏飄字效果(附完整代碼)

    這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)浪漫的彈窗祝福滿屏飄字效果,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2026-01-01
  • python腳本監(jiān)聽域名證書過期時間并通知消息到釘釘(最新推薦)

    python腳本監(jiān)聽域名證書過期時間并通知消息到釘釘(最新推薦)

    這篇文章主要介紹了python腳本監(jiān)聽域名證書過期時間并通知消息到釘釘(最新推薦),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-11-11
  • 對django 2.x版本中models.ForeignKey()外鍵說明介紹

    對django 2.x版本中models.ForeignKey()外鍵說明介紹

    這篇文章主要介紹了對django 2.x版本中models.ForeignKey()外鍵說明介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 用TensorFlow實現(xiàn)戴明回歸算法的示例

    用TensorFlow實現(xiàn)戴明回歸算法的示例

    這篇文章主要介紹了用TensorFlow實現(xiàn)戴明回歸算法的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • python 同時讀取多個文件的例子

    python 同時讀取多個文件的例子

    今天小編就為大家分享一篇python 同時讀取多個文件的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論

乐至县| 策勒县| 台东市| 广水市| 赤水市| 清苑县| 肥东县| 英山县| 奉化市| 霍林郭勒市| 永春县| 手游| 泾阳县| 安阳市| 南开区| 淳化县| 启东市| 比如县| 云阳县| 健康| 镇平县| 泗阳县| 庄浪县| 潜山县| 榆中县| 永和县| 烟台市| 甘孜县| 甘德县| 平阴县| 潢川县| 德阳市| 天水市| 邹平县| 台中县| 罗定市| 岳普湖县| 上栗县| 诸城市| 惠州市| 陈巴尔虎旗|