解决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
投稿
猜你喜欢
- 网上看到一些例子,对于一个简单的3 级联动,都加上什么Struts, Hibernate诸如此类的框架。这个Ajax联动殊不知和这些框架有什
- 但还有另外一个问题 - 你以为你修改了某个变量,其实,被from module import *后的那个并没有被更新,非常危险,因为程序有可
- Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。一、创建字典字典由键和对应值成对组成。字典也
- 从MySQL 5.0.2开始,通过mysql_stmt_attr_set() C API函数实现了服务器端光标。服务器端光标允许在服务器端生
- 本文实例讲述了Python中str.join()简单用法。分享给大家供大家参考,具体如下:Python join() 方法用于将序列中的元素
- 概要:Oracle关系数据库系统以其卓越的性能获得了广泛的应用,而保证数据库的安全性 是数据库管理工作的重要内容。本文是笔者在总结Oracl
- 集合(Set)集合是无序和无索引的集合。在 Python 中,集合用花括号编写。实例创建集合:thisset = {"apple&
- 一个随机排列元素的方法, 其实之前是在摄影页面写的一个小效果.查看演示: 点此查看DEMO实现方法利用Math.random()产生随机数,
- 通常情况下,即使MyISAM表格式非常可靠(SQL语句对表做的所有改变在语句返回之前被写下),如果下列任何事件发生,你依然可以获得损坏的表:
- Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 Web 应用程序框架。它是Python API开发
- ORACLE访问SQL SERVER数据库有一篇《Oracle 异构服务实践》讲得很清楚。但里面没有讲如何设置访问多个SQL Server数
- 先来看一个简单的利用python调用sqlplus来输出结果的例子:import osimport sysfrom subprocess i
- 用法:注意是用英文的逗号",",且之间没有空格。文件名,[工作表名称,不写则默认当前激活的表],[从第几行开始,不写则默
- 今天看到的这篇文章, 让我对Chrome能够带来的影响,有了点新想法。Update: 发现我在跟别人讨论时,比直接写作文说得清楚一些,对这个
- 如下所示:#coding=utf-8#布局自定义尺寸from tkinter import *class App:def __init__(
- 字符串是日常开发中用到最多的数据类型之一,了解字符串首先要明白定界符。定界符有4种,单引号、双引号、heredoc、nowdoc,常使用的单
- pyecharts显示数据为百分比的柱状图pyecharts是做数据分析的好帮手,柱状图比较简单,网站例子不够多,一般柱状图就是直接传两组数
- 昨天装了个SQL2000,打开企业管理器,发现SQL Server组下面没有任何的内容,提示“无项目”。之前sa设置的都是空密码就没碰到这个
- 基本简介dot函数为numpy库下的一个函数,主要用于矩阵的乘法运算,其中包括:向量内积、多维矩阵乘法和矩阵与向量的乘法。1. 向量内积向量
- 实现原理 把所有需要延时加载的图片改成如下的格式:<img lazy_src="图片路径" border