解決Python httpx 運(yùn)行過程中無限阻塞的問題
Python httpx 運(yùn)行過程中無限阻塞
requests 模塊只支持 http1,在遇到 http2 的數(shù)據(jù)接口的時候(某乎的搜索接口),需要采用支持http2 請求的模塊(如 httpx、hyper)。
本文是針對 httpx 在請求數(shù)據(jù)時,出現(xiàn)無限阻塞問題的一些處理方法。
httpx 的 timeout 有 bug,會導(dǎo)致腳本在運(yùn)行一段時間后,出現(xiàn)線程阻塞卡死的問題(無限 timeout)。
1.通過 pm2 部署腳本
另外啟動一個腳本,定時對該腳本進(jìn)行重啟操作。
舉個栗子:
import time import os while True: ? ? time.sleep(60 * 60) # 一小時重啟一次 ? ? os.system('pm2 restart test') ?
這個方法有個不好的地方,在請求過程中,可能需要翻很多頁,如果不斷重啟腳本,可能導(dǎo)致無法翻到最后一頁。
2.通過裝飾器給函數(shù)設(shè)置一個最大執(zhí)行超時時間
當(dāng)函數(shù)執(zhí)行時間超過某個時間就拋出 TimeOut 異常
from func_timeout import func_set_timeout import func_timeout import time @func_set_timeout(5) ?# 函數(shù)最大執(zhí)行時間 5s def test(): ? ? time.sleep(20) def run(): ? ? try: ? ? ? ? test() ? ? ? ? print('test 函數(shù)執(zhí)行完成') ? ? except func_timeout.exceptions.FunctionTimedOut: ? ? ? ? print('test 函數(shù)執(zhí)行超時') run()
如上面例子那樣,在 httpx.Client 所在函數(shù)設(shè)置一個額外等待時間,當(dāng)該函數(shù)執(zhí)行時間超過某個時間,就強(qiáng)制拋出 timeout 異常,避免程序無限阻塞。
python爬蟲httpx的用法
安裝命令:pip install httpx
請求方式
GET
import httpx ? headers = {'user-agent': 'my-app/1.0.0'} params = {'key1': 'value1', 'key2': 'value2'} url = 'https://httpbin.org/get' r = httpx.get(url, headers=headers, params=params)
POST
r = httpx.post('https://httpbin.org/post', data={'key': 'value'})?
PUT
r = httpx.put('https://httpbin.org/put', data={'key': 'value'})
DELETE
r = httpx.delete('https://httpbin.org/delete')?
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python標(biāo)準(zhǔn)庫urllib2的一些使用細(xì)節(jié)總結(jié)
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫urllib2的一些使用細(xì)節(jié)總結(jié),本文總結(jié)了Proxy 的設(shè)置、Timeout 設(shè)置、Redirect、Cookie等細(xì)節(jié)的使用,需要的朋友可以參考下2015-03-03提升Python效率之使用循環(huán)機(jī)制代替遞歸函數(shù)
這篇文章主要介紹了提升Python效率之使用循環(huán)機(jī)制代替遞歸函數(shù)的相關(guān)知識,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07python通過opencv調(diào)用攝像頭操作實例分析
在本篇文章里小編給大家整理的是一篇關(guān)于python通過opencv調(diào)用攝像頭操作實例分析內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-06-06Python基礎(chǔ)教程之增加和去除數(shù)字的千位分隔符
千位分隔符其實就是數(shù)字中的逗號,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之增加和去除數(shù)字的千位分隔符,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01python 插入Null值數(shù)據(jù)到Postgresql的操作
這篇文章主要介紹了python 插入Null值數(shù)據(jù)到Postgresql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03