gpt4 book ai didi

python - Python 的 Requests 库线程中的 Session 对象是否安全?

转载 作者:IT老高 更新时间:2023-10-28 21:38:01 29 4
gpt4 key购买 nike

Python 流行的 Requests该库在其主页上据说是线程安全的,但没有给出进一步的细节。如果我调用 requests.session(),我可以像这样安全地将这个对象传递给多个线程吗:

session = requests.session()
for i in xrange(thread_count):
threading.Thread(
target=target,
args=(session,),
kwargs={}
)

并在多个线程中使用同一个连接池发出请求?

如果是这样,这是推荐的方法,还是应该为每个线程提供自己的连接池? (假设所有单个连接池的总大小加起来就是一个大连接池的大小,就像上面的那个。)每种方法的优缺点是什么?

最佳答案

查看requests.session的来源后,我会说 session 对象可能是线程安全的,这取决于所使用的 CookieJar 的实现。

Session.prepare_requestself.cookies 读取,Session.send 调用 extract_cookies_to_jar(self.cookies, ... ),并调用 jar.extract_cookies(...)(在这种情况下,jarself.cookies)。

Python 2.7's cookielib 的来源在更新 jar 时获取锁 (threading.RLock),因此它看起来是线程安全的。另一方面,documentation for cookielib对线程安全只字未提,所以也许不应该依赖这个特性?

更新

如果您的线程正在改变 session 对象的任何属性,例如 headersproxiesstream 等,或者调用 mount 方法或使用带有 with 语句的 session 等,那么它不是线程安全的。

关于python - Python 的 Requests 库线程中的 Session 对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188044/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com