首页 > 解决方案 > 如果只执行 get 请求(并且忽略 cookie),Python 的 Requests 库线程是否安全?

问题描述

关于对象 Python requests 模块的线程安全似乎有很多相互矛盾的信息Session,一些用户说它在某些情况下是线程安全的,而另一些用户则说它根本不应该被认为是线程安全的,而且很多的用户似乎建议使用 aiohttp,因为它是围绕异步编程设计的。

很明显,如果用户是每个线程的 requests.get() 调用,那么 requests 确实是线程安全的,因为 requests.get() 每次调用时都会在后台创建一个新会话,但是,我不清楚什么是创建全局Session对象并向各个线程中的会话发出GET请求时的线程安全性,如果用户实际上并不关心共享Session对象提供的功能(如记住 cookie 信息)并且只是希望重用与 API 端点的相同连接以提高速度。

Session此外,在线程的中途重新定义全局对象是否是线程安全的?

下面是该逻辑的伪代码示例:

GLOBAL_SESSION = requests.Session()

def make_api_call(x):
    while True
        for i in api_calls:

            GLOBAL_SESSION.get(i)

            if some_condition_occurs:
                GLOBAL_SESSION = requests.Session()
                GLOBAL_SESSION.get(i)

for in range(y):
    t = Thread(target=make_api_calls, args=(x, )).start()

标签: pythonpython-3.xmultithreadingpython-requestsaiohttp

解决方案


推荐阅读