亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決Python httpx 運(yùn)行過(guò)程中無(wú)限阻塞的問(wèn)題

 更新時(shí)間:2022年11月28日 17:03:25   作者:多多魚(yú)啊  
這篇文章主要介紹了解決Python httpx 運(yùn)行過(guò)程中無(wú)限阻塞的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Python httpx 運(yùn)行過(guò)程中無(wú)限阻塞

requests 模塊只支持 http1,在遇到 http2 的數(shù)據(jù)接口的時(shí)候(某乎的搜索接口),需要采用支持http2 請(qǐng)求的模塊(如 httpx、hyper)。

本文是針對(duì) httpx 在請(qǐng)求數(shù)據(jù)時(shí),出現(xiàn)無(wú)限阻塞問(wèn)題的一些處理方法。

httpx 的 timeout 有 bug,會(huì)導(dǎo)致腳本在運(yùn)行一段時(shí)間后,出現(xiàn)線(xiàn)程阻塞卡死的問(wèn)題(無(wú)限 timeout)。

1.通過(guò) pm2 部署腳本

另外啟動(dòng)一個(gè)腳本,定時(shí)對(duì)該腳本進(jìn)行重啟操作。

舉個(gè)栗子:

import time
import os

while True:
? ? time.sleep(60 * 60) # 一小時(shí)重啟一次
? ? os.system('pm2 restart test') ?

這個(gè)方法有個(gè)不好的地方,在請(qǐng)求過(guò)程中,可能需要翻很多頁(yè),如果不斷重啟腳本,可能導(dǎo)致無(wú)法翻到最后一頁(yè)。

2.通過(guò)裝飾器給函數(shù)設(shè)置一個(gè)最大執(zhí)行超時(shí)時(shí)間

當(dāng)函數(shù)執(zhí)行時(shí)間超過(guò)某個(gè)時(shí)間就拋出 TimeOut 異常

from func_timeout import func_set_timeout
import func_timeout
import time

@func_set_timeout(5) ?# 函數(shù)最大執(zhí)行時(shí)間 5s
def test():
? ? time.sleep(20)

def run():
? ? try:
? ? ? ? test()
? ? ? ? print('test 函數(shù)執(zhí)行完成')
? ? except func_timeout.exceptions.FunctionTimedOut:
? ? ? ? print('test 函數(shù)執(zhí)行超時(shí)')
run()

如上面例子那樣,在 httpx.Client 所在函數(shù)設(shè)置一個(gè)額外等待時(shí)間,當(dāng)該函數(shù)執(zhí)行時(shí)間超過(guò)某個(gè)時(shí)間,就強(qiáng)制拋出 timeout 異常,避免程序無(wú)限阻塞。

python爬蟲(chóng)httpx的用法

安裝命令:pip install httpx

請(qǐng)求方式

  • 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')?

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

相關(guān)文章

  • python實(shí)現(xiàn)狄克斯特拉算法

    python實(shí)現(xiàn)狄克斯特拉算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)狄克斯特拉算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python標(biāo)準(zhǔn)庫(kù)urllib2的一些使用細(xì)節(jié)總結(jié)

    Python標(biāo)準(zhǔn)庫(kù)urllib2的一些使用細(xì)節(jié)總結(jié)

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)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ù)

    這篇文章主要介紹了提升Python效率之使用循環(huán)機(jī)制代替遞歸函數(shù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python通過(guò)opencv調(diào)用攝像頭操作實(shí)例分析

    python通過(guò)opencv調(diào)用攝像頭操作實(shí)例分析

    在本篇文章里小編給大家整理的是一篇關(guān)于python通過(guò)opencv調(diào)用攝像頭操作實(shí)例分析內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-06-06
  • Python基礎(chǔ)教程之增加和去除數(shù)字的千位分隔符

    Python基礎(chǔ)教程之增加和去除數(shù)字的千位分隔符

    千位分隔符其實(shí)就是數(shù)字中的逗號(hào),下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之增加和去除數(shù)字的千位分隔符,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • python 插入Null值數(shù)據(jù)到Postgresql的操作

    python 插入Null值數(shù)據(jù)到Postgresql的操作

    這篇文章主要介紹了python 插入Null值數(shù)據(jù)到Postgresql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python基本文件操作實(shí)用指南

    Python基本文件操作實(shí)用指南

    文件操作是我們開(kāi)發(fā)中必不可少的一項(xiàng)需求,下面這篇文章主要給大家介紹了關(guān)于Python基本文件操作的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Keras自定義IOU方式

    Keras自定義IOU方式

    這篇文章主要介紹了Keras自定義IOU方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • django 自定義過(guò)濾器的實(shí)現(xiàn)

    django 自定義過(guò)濾器的實(shí)現(xiàn)

    這篇文章主要介紹了django 自定義過(guò)濾器的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • python操作oracle的完整教程分享

    python操作oracle的完整教程分享

    下面小編就為大家分享一篇python操作oracle的完整教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧,祝大家游戲愉快哦
    2018-01-01

最新評(píng)論