解决Python httpx 运行过程中无限阻塞的问题
作者:多多鱼啊 发布时间:2023-03-26 12:17:05
标签:Python,httpx,无限阻塞
Python httpx 运行过程中无限阻塞
requests 模块只支持 http1,在遇到 http2 的数据接口的时候(某乎的搜索接口),需要采用支持http2 请求的模块(如 httpx、hyper)。
本文是针对 httpx 在请求数据时,出现无限阻塞问题的一些处理方法。
httpx 的 timeout 有 bug,会导致脚本在运行一段时间后,出现线程阻塞卡死的问题(无限 timeout)。
1.通过 pm2 部署脚本
另外启动一个脚本,定时对该脚本进行重启操作。
举个栗子:
import time
import os
while True:
time.sleep(60 * 60) # 一小时重启一次
os.system('pm2 restart test')
这个方法有个不好的地方,在请求过程中,可能需要翻很多页,如果不断重启脚本,可能导致无法翻到最后一页。
2.通过装饰器给函数设置一个最大执行超时时间
当函数执行时间超过某个时间就抛出 TimeOut 异常
from func_timeout import func_set_timeout
import func_timeout
import time
@func_set_timeout(5) # 函数最大执行时间 5s
def test():
time.sleep(20)
def run():
try:
test()
print('test 函数执行完成')
except func_timeout.exceptions.FunctionTimedOut:
print('test 函数执行超时')
run()
如上面例子那样,在 httpx.Client 所在函数设置一个额外等待时间,当该函数执行时间超过某个时间,就强制抛出 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')
来源:https://blog.csdn.net/weixin_44144647/article/details/126520424
0
投稿
猜你喜欢
- ACCESS数据库中Field对象的caption属性(也就是标题)是用来设置数据字段的标题,在正常的数据库设计中为了保持维护的便利性,许多
- 首先要解释一下:“极致之美”不是说月儿的这篇文章,因为本人还没有自大到这种程度:P,它形容的是Lisp和javascript结合的优美形态。
- 本文实例讲述了Python实现获取邮箱内容并解析的方法。分享给大家供大家参考,具体如下:# -*- coding: utf-8 -*-fro
- 看代码吧~predict = output.argmax(dim = 1)confusion_matrix =torch.zeros(2,2
- strSourceFile = Server.MapPath(dataXML&"/Advertisement/"
- 前言前几天逛github发现了一个有趣的并发库-conc,其目标是:更难出现goroutine泄漏处理panic更友好并发代码可读性高从简介
- 真的很重要,栽了个跟头!!!(虽然以前好像知道。。。)print(True or False and False)print((True o
- 这最近在PJ的function库里看到的这个函数,感觉思路差了点,不过相对比较完美,只是闭合标签时的顺序问题,呵呵 修改一下数组arrTag
- 这篇论坛文章(赛迪网技术社区)主要介绍了数据仓库基本报表制作过程中的SQL写法,详细内容请参考下文:在数据仓库的基本报表制作过程中,通常会使
- jQuery中文入门指南,翻译加实例,jQuery的起点教程中文版译者:Keel此文以实例为基础一步步说明了jQuery的工作方式。现以中文
- 在asp中利用excel的一个方法是将excel文件作为一个数据库进行链接,然后的操作和对access数据库操作类似。但是这个方法不是总能有
- 起因:学校运河杯报了个项目,制作一个天气预测的装置。我用arduino跑了BME280模块,用蓝牙模块实现两块arduino主从机透传。但是
- 一、原型模式原型是相对于复制、克隆而言的,但是不同于模板,模板创造出的东西是一模一样,而原型创造出的东西是允许存在差异化和个性化的。原型模式
- “选项卡”经常会被混同为“滑动门”,滑动门只是一种背景自适应内容的实现方法,不只可以应用在导航菜单,一样也可以应用在其他地方。例如选项卡中就
- 昨天我问过这个问题怎么用ADODB.Stream来读取或写入文件,而不是用fso,不过没人回答到点上,今天搞定了.贴出来给觉得有用的朋友,希
- Francesc (@francesc) 是 Go 核心团队的一员, 是提倡 Google Cloud 平台的开发者. 他是一个编程语言的爱
- PHP mysqli_sqlstate() 函数返回最后一个 MySQL 操作的 SQLSTATE 错误代码:<?php// 假定数据
- 问:Perl下应当如何连接Access数据库答:首先需要安装Win32-ODBC模块,具体的步骤如下:1:从TOOLS栏目中下载Win32-
- 最近看ECShop到网上找资料,发现好多说明ECShop的文件结构不全面,于是想自己弄个出来。但这是个无聊耗时的工作,自己就写了个Pytho
- 计算机键盘每天用得太多了,以致于我们无视它的存在(盲打),当然也很少有人去问这样一个问题——为什么键盘字母的排列方式是QWERTY而不是AB