Python控制線程和函數(shù)超時(shí)處理
前言
在我們使用線程池控制線程運(yùn)行時(shí),或者是寫爬蟲(chóng)時(shí)不停發(fā)送request獲取地址,都需要我們對(duì)運(yùn)行的線程加以控制。有這樣一種場(chǎng)景,當(dāng)你寫入一條網(wǎng)站請(qǐng)求時(shí),該線程一直請(qǐng)求并沒(méi)有回應(yīng)導(dǎo)致線程造成堵塞,浪費(fèi)珍貴的線程資源。當(dāng)你寫入一條錯(cuò)誤的sql查詢語(yǔ)句時(shí),該查詢語(yǔ)句一直運(yùn)行需要花費(fèi)大量時(shí)間,導(dǎo)致其他查詢語(yǔ)句阻塞。遇到如上述情況必須對(duì)線程加以控制,才能使得程序腳本穩(wěn)定性更高。
控制線程運(yùn)行時(shí)間方法有多種:
這里介紹兩種方法,一種是用eventlet庫(kù)的方法進(jìn)行,該方法只要進(jìn)行了子程序調(diào)用就失效了。另一種方法是使用@func_set_timeout修飾器,該方法可作用于函數(shù)、線程等一系列子函數(shù),是最方便最簡(jiǎn)單高效的方法。這里來(lái)進(jìn)行代碼操作演示這兩種方法。
一、Eventlet
該庫(kù)可以直接下載:
pip install eventlet
import time
import eventlet#導(dǎo)入eventlet
eventlet.monkey_patch()#引入patch
with eventlet.Timeout(2,False):#設(shè)置超時(shí)時(shí)間為2秒
? ? time.sleep(3)
? ? print('1')
print('2')我們?cè)O(shè)定睡眠時(shí)間為3秒,超過(guò)了2秒,這樣會(huì)導(dǎo)致print('1')這條語(yǔ)句執(zhí)行跳過(guò),直接輸出2:

import time
import eventlet#導(dǎo)入eventlet
eventlet.monkey_patch()#引入patch
with eventlet.Timeout(2,False):#設(shè)置超時(shí)時(shí)間為2秒
? ? time.sleep(1)
? ? print('1')
print('2')當(dāng)我們修改time.sleep為1小于2時(shí),并沒(méi)有超時(shí),此時(shí)應(yīng)該輸出1、2:

當(dāng)我們想要調(diào)用子程序該函數(shù)是不起作用的。像這樣,該函數(shù)沒(méi)有效果,這時(shí)候我們需要使用第二種方法。

二、func-timeout
1.安裝
直接安裝就好了
pip install func-timeout
2.使用
一般是和try except一起用,超時(shí)則扔出錯(cuò)誤。
from func_timeout import func_set_timeout import func_timeout @func_set_timeout(1)#設(shè)定函數(shù)超時(shí)執(zhí)行時(shí)間 def task(i): ? ? time.sleep(2) ? ? print(i) try: ? ? task(1) except: ? ? print(2)
這時(shí)候sleep時(shí)間超過(guò)1應(yīng)該輸出2:

from func_timeout import func_set_timeout import func_timeout @func_set_timeout(3)#設(shè)定函數(shù)超時(shí)執(zhí)行時(shí)間 def task(i): ? ? time.sleep(2) ? ? print(i) try: ? ? task(1) except: ? ? print(2)
這樣就輸出為1.
到此這篇關(guān)于Python控制線程和函數(shù)超時(shí)處理的文章就介紹到這了,更多相關(guān)Python控制線程 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 多線程搜索txt文件的內(nèi)容,并寫入搜到的內(nèi)容(Lock)方法
今天小編就為大家分享一篇Python 多線程搜索txt文件的內(nèi)容,并寫入搜到的內(nèi)容(Lock)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
關(guān)于tf.matmul() 和tf.multiply() 的區(qū)別說(shuō)明
這篇文章主要介紹了關(guān)于tf.matmul() 和tf.multiply() 的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
pycharm使用matplotlib畫圖問(wèn)題解決方法
Pycharm是一款功能強(qiáng)大的Python集成開(kāi)發(fā)環(huán)境(IDE),它提供了許多有用的工具和功能,可以幫助開(kāi)發(fā)人員更輕松地編寫和調(diào)試Python代碼,其中一個(gè)有用的工具是Pycharm如何畫圖,本文給大家介紹在pycharm中使用matplotlib畫圖問(wèn)題,感興趣的朋友一起看看吧2023-11-11
Python獲取list中指定元素索引的兩種方法小結(jié)
本文主要介紹了兩種在Python中獲取列表中指定元素索引的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
一文教會(huì)你用Python獲取網(wǎng)頁(yè)指定內(nèi)容
Python用做數(shù)據(jù)處理還是相當(dāng)不錯(cuò)的,如果你想要做爬蟲(chóng),Python是很好的選擇,它有很多已經(jīng)寫好的類包,只要調(diào)用即可完成很多復(fù)雜的功能,下面這篇文章主要給大家介紹了關(guān)于Python獲取網(wǎng)頁(yè)指定內(nèi)容的相關(guān)資料,需要的朋友可以參考下2022-03-03
django admin添加數(shù)據(jù)自動(dòng)記錄user到表中的實(shí)現(xiàn)方法
下面小編就為大家分享一篇django admin添加數(shù)據(jù)自動(dòng)記錄user到表中的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

