Python控制線程和函數(shù)超時處理
前言
在我們使用線程池控制線程運行時,或者是寫爬蟲時不停發(fā)送request獲取地址,都需要我們對運行的線程加以控制。有這樣一種場景,當(dāng)你寫入一條網(wǎng)站請求時,該線程一直請求并沒有回應(yīng)導(dǎo)致線程造成堵塞,浪費珍貴的線程資源。當(dāng)你寫入一條錯誤的sql查詢語句時,該查詢語句一直運行需要花費大量時間,導(dǎo)致其他查詢語句阻塞。遇到如上述情況必須對線程加以控制,才能使得程序腳本穩(wěn)定性更高。
控制線程運行時間方法有多種:
這里介紹兩種方法,一種是用eventlet庫的方法進(jìn)行,該方法只要進(jìn)行了子程序調(diào)用就失效了。另一種方法是使用@func_set_timeout修飾器,該方法可作用于函數(shù)、線程等一系列子函數(shù),是最方便最簡單高效的方法。這里來進(jìn)行代碼操作演示這兩種方法。
一、Eventlet
該庫可以直接下載:
pip install eventlet import time import eventlet#導(dǎo)入eventlet eventlet.monkey_patch()#引入patch with eventlet.Timeout(2,False):#設(shè)置超時時間為2秒 ? ? time.sleep(3) ? ? print('1') print('2')
我們設(shè)定睡眠時間為3秒,超過了2秒,這樣會導(dǎo)致print('1')這條語句執(zhí)行跳過,直接輸出2:
import time import eventlet#導(dǎo)入eventlet eventlet.monkey_patch()#引入patch with eventlet.Timeout(2,False):#設(shè)置超時時間為2秒 ? ? time.sleep(1) ? ? print('1') print('2')
當(dāng)我們修改time.sleep為1小于2時,并沒有超時,此時應(yīng)該輸出1、2:
當(dāng)我們想要調(diào)用子程序該函數(shù)是不起作用的。像這樣,該函數(shù)沒有效果,這時候我們需要使用第二種方法。
二、func-timeout
1.安裝
直接安裝就好了
pip install func-timeout
2.使用
一般是和try except一起用,超時則扔出錯誤。
from func_timeout import func_set_timeout import func_timeout @func_set_timeout(1)#設(shè)定函數(shù)超時執(zhí)行時間 def task(i): ? ? time.sleep(2) ? ? print(i) try: ? ? task(1) except: ? ? print(2)
這時候sleep時間超過1應(yīng)該輸出2:
from func_timeout import func_set_timeout import func_timeout @func_set_timeout(3)#設(shè)定函數(shù)超時執(zhí)行時間 def task(i): ? ? time.sleep(2) ? ? print(i) try: ? ? task(1) except: ? ? print(2)
這樣就輸出為1.
到此這篇關(guān)于Python控制線程和函數(shù)超時處理的文章就介紹到這了,更多相關(guān)Python控制線程 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
學(xué)會python自動收發(fā)郵件 代替你問候女友
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)自動收發(fā)郵件,代替你問候女友,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05python3 property裝飾器實現(xiàn)原理與用法示例
這篇文章主要介紹了python3 property裝飾器實現(xiàn)原理與用法,結(jié)合實例形式分析了Python3 property裝飾器功能、原理及實現(xiàn)方法,需要的朋友可以參考下2019-05-05Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié)
使用urllib2模塊進(jìn)行基于url的HTTP請求等操作大家也許都比較熟悉,這里我們再深入來了解一下urllib2針對HTTP的異常處理相關(guān)功能,一起來看一下Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié):2016-07-07python使用opencv對圖像添加噪聲(高斯/椒鹽/泊松/斑點)
這篇文章主要介紹了python使用opencv對圖像添加噪聲(高斯/椒鹽/泊松/斑點),具有一定的學(xué)習(xí)價值,需要的小伙伴可以參考一下,希望對你有所幫助2022-04-04python和numpy?matplotlib版本匹配及安裝指定版本庫
Matplotlib 是 Python 的繪圖庫,它經(jīng)常與NumPy一起使用,從而提供一種能夠代替Matlab的方案,這篇文章主要給大家介紹了關(guān)于python和numpy?matplotlib版本匹配及安裝指定版本庫的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10