Python、线程和请求:当我在一个会话中发出并发请求时会发生什么?

2024-06-14 13:39:00 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我通过请求。会话对于服务器,使用ThreadPoolExecutor:

session = requests.Session()
executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)

def post(data):
    response = mysession.post('http://example.com/api/endpoint1', data)
    return response

for data in (data1, data2, data3, data4, data5):
    executor.submit(post, data)

因为我们用的是相同的请求。会话对于每个请求,我们是否必须等待服务器确认第一个请求,然后才能发送下一个请求?在

如果我同时打开了5个会话——每个线程一个会话——我是否能够通过自己的会话发送每个请求来更快地发送请求?在

维护人员已经推荐了"one session per thread",所以它肯定是可行的。。。但它会提高性能吗?在

使用aiohttp和async会更好吗?在


Tags: 服务器dataresponsesessiondefpostrequestsconcurrent
1条回答
网友
1楼 · 发布于 2024-06-14 13:39:00

因此,首先,如果您不确定某个对象/函数是否是线程安全的,那么您应该假设它不是。因此,在没有适当锁定的情况下,不应该在多个线程中使用Session对象。在

一如既往地衡量绩效。许多库往往在幕后做很多事情,包括打开多个TCP连接。它们可能被配置为调整性能,所以很难精确地回答这个问题。尤其是因为我们不知道你的案子。例如,如果您打算发出5个并行请求,那么只需运行5个线程和5个会话对象。很可能你看不到libs之间的区别(除非你选择了一个非常糟糕的libs)。另一方面,如果您正在查看成百上千个并发请求,这将很重要。在

总之:总是自己测量。在

相关问题 更多 >