網站首頁 編程語言 正文
前言
在我們使用線程池控制線程運行時,或者是寫爬蟲時不停發送request獲取地址,都需要我們對運行的線程加以控制。有這樣一種場景,當你寫入一條網站請求時,該線程一直請求并沒有回應導致線程造成堵塞,浪費珍貴的線程資源。當你寫入一條錯誤的sql查詢語句時,該查詢語句一直運行需要花費大量時間,導致其他查詢語句阻塞。遇到如上述情況必須對線程加以控制,才能使得程序腳本穩定性更高。
控制線程運行時間方法有多種:
這里介紹兩種方法,一種是用eventlet庫的方法進行,該方法只要進行了子程序調用就失效了。另一種方法是使用@func_set_timeout修飾器,該方法可作用于函數、線程等一系列子函數,是最方便最簡單高效的方法。這里來進行代碼操作演示這兩種方法。
一、Eventlet
該庫可以直接下載:
pip install eventlet
import time
import eventlet#導入eventlet
eventlet.monkey_patch()#引入patch
with eventlet.Timeout(2,False):#設置超時時間為2秒
? ? time.sleep(3)
? ? print('1')
print('2')
我們設定睡眠時間為3秒,超過了2秒,這樣會導致print('1')這條語句執行跳過,直接輸出2:
import time
import eventlet#導入eventlet
eventlet.monkey_patch()#引入patch
with eventlet.Timeout(2,False):#設置超時時間為2秒
? ? time.sleep(1)
? ? print('1')
print('2')
?當我們修改time.sleep為1小于2時,并沒有超時,此時應該輸出1、2:
當我們想要調用子程序該函數是不起作用的。像這樣,該函數沒有效果,這時候我們需要使用第二種方法。
二、func-timeout
1.安裝
直接安裝就好了
pip install func-timeout
2.使用
一般是和try except一起用,超時則扔出錯誤。
from func_timeout import func_set_timeout
import func_timeout
@func_set_timeout(1)#設定函數超時執行時間
def task(i):
? ? time.sleep(2)
? ? print(i)
try:
? ? task(1)
except:
? ? print(2)
這時候sleep時間超過1應該輸出2:
from func_timeout import func_set_timeout
import func_timeout
@func_set_timeout(3)#設定函數超時執行時間
def task(i):
? ? time.sleep(2)
? ? print(i)
try:
? ? task(1)
except:
? ? print(2)
這樣就輸出為1.?
原文鏈接:https://jxnuxwt.blog.csdn.net/article/details/125065832
相關推薦
- 2022-12-22 Python進階之import導入機制原理詳解_python
- 2022-12-08 python求兩個時間的時間差(實例代碼)_python
- 2022-06-07 ASP.NET?Core應用啟動Startup類簡介_基礎應用
- 2022-02-25 C++實現單例模式的方法_C 語言
- 2022-02-02 怎么樣判斷頁面是否在iframe框架里
- 2022-07-02 element下拉框獲取選中的內容
- 2022-04-14 如何解決:git push error: failed to push some refs to
- 2022-04-10 新版Microsoft Edge關閉平滑滾動,類似chrome效果
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支