python requests post线程安全_关于python requests库中session线程安全方面问题的小疑问...

官方文档中找了很久,没有看到kenneth reitz对于session在多线程下是否线程安全的说明。GitHub上有一个类似的讨论。

问题

每个线程使用单独的requests.get(url)还是说建立一个全局的session,多个线程同时操作session.get(url)方法。我认为由于session中保存有相关的cookie等信息,每一次session.get(url)请求都会改变session中的cookie等信息,好像不行。

简单一点描述问题就是每个线程是否应该拥有独立的session?

补充

在aiohttp中有这样一句话:

Don’t create a session per request. Most likely you need a session per application which performs all requests altogether. A session contains a connection pool inside, connection reusage and keep-alives (both are on by default) may speed up total performance.

不过aiohttp是基于协程即运行在单线程中的。

更新

假设有这样一种场景,队列中有多个不同的url,(由于url不同,所以session的线程安全问题可以暂时不考虑),请问多线程共享一个全局的session好么?(类比aiohttp的建议)

即线程池共享一个session还是每个线程单独开一个session好?因为大部分网页并不涉及到登录处理等cookie问题,session的线程安全不必过多的考虑。

简单看了一眼源码,没看到任何锁之类的东西。操作的过程都挺复杂的,又没锁,在作者没做说明的情况下就先当作不安全的吧。

好像不是thread-safe.

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd14157.html

相关文章 Recommend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要提高`requests.post`下载速度,可以尝试以下几种方法: 1. 使用`Session`对象:`Session`对象可以在多个请求之间保持会话状态,包括TCP连接的重用。这样可以减少握手和建立连接的时间,从而加快下载速度。例如: ```python import requests session = requests.Session() response = session.post(url, data=data) ``` 2. 设置`headers`:通过设置合适的`headers`,可以避免服务器对请求进行额外的处理,提高下载速度。例如: ```python import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', } response = requests.post(url, headers=headers) ``` 3. 使用`keep-alive`连接:通过设置`Connection`头为`keep-alive`,可以保持TCP连接的复用,减少连接的建立和关闭开销。例如: ```python import requests headers = { 'Connection': 'keep-alive', } response = requests.post(url, headers=headers) ``` 4. 使用多线程或异步请求:如果需要同时下载多个文件,可以考虑使用多线程或异步请求来并发处理请求,从而提高下载速度。例如使用`concurrent.futures`库进行多线程请求: ```python import requests from concurrent.futures import ThreadPoolExecutor urls = [...] # 多个下载链接 def download(url): response = requests.post(url) # 处理响应... with ThreadPoolExecutor(max_workers=5) as executor: executor.map(download, urls) ``` 这些方法可以根据实际情况进行组合和调整,以提高`requests.post`下载速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值