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

right2clicky

假设我使用ThreadPoolExecutor通过request.Session向服务器发出了5个请求:

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)

由于我们对每个请求都使用相同的request.Session,因此是否必须等待服务器确认第一个请求才能发送下一个请求?

如果我同时打开5个会话(每个线程一个会话),是否可以通过自己的会话发送每个请求来更快地发送请求?

维护人员已经建议“每个线程一个会话”,因此这肯定是可行的……但是会提高性能吗?

使用aiohttp和async会更好吗?

怪异的

因此,首先,如果您不确定某些对象/函数是否是线程安全的,则应假定不是因此,如果Session没有适当的锁定,则不应在多个线程中使用对象。

至于性能:始终衡量。许多库往往在后台做很多事情,包括打开多个TCP连接。可以将它们配置为调整性能,因此很难精确地回答问题。特别是因为我们不知道您的情况。例如,如果您打算发出5个并行请求,则只需运行5个带有5个会话对象的线程即可。您很可能不会在lib之间看到差异(除非您选择了一个非常糟糕的lib)。另一方面,如果您正在查看成百上千的并发请求,那将很重要。

无论如何:请始终自己进行测量

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我在Clojure中从多个线程定义一个变量时会发生什么情况?

在Python 3中,当我索引一个字节数组时会发生什么?

当我向子网添加一个空的 nsg 时会发生什么变化?

当我定义一个抽象类而不是声明时会发生什么。

当我们git checkout一个提交时会发生什么

如果在我收到第一个请求的响应之前发出了第二个HTTP请求,会发生什么情况?

Axios发出发布请求时会发生什么?

Play框架:当请求超出可用线程时会发生什么

当我有两个指针指向同一个对象时会发生什么?

当我们在 kubernetes 中创建具有多个副本和一个 pvc 的状态集时会发生什么?

春季:当我们将@ComponentScan移到包中的另一个类时会发生什么?

当我从静态ArrayList中获取一个对象并更改其参数时会发生什么?

当我以编程方式添加一个没有约束的子视图时会发生什么?

当我在 ADO.NET 中阅读时另一个进程更新记录时会发生什么

当我们从另一个char整数减去一个char整数时会发生什么?

当我在运行中的Visual Studio 2013中的另一个项目上打开一个项目时会发生什么?

在angular 2上,当我从一个大库中仅导入一个模块时,构建时会发生什么?

当我将一个字符数组发送到一个输入参数是字符串的函数时会发生什么?

当我们在微任务队列中返回一个值并从 then() 链返回一个 Promise.resolve 时会发生什么?

当我们在 OpenAPI POST 端点的请求正文(JSON)中传递额外的字段时会发生什么

当两个线程尝试在并发HashMap中修改/访问同一密钥时会发生什么?

当我们将 2 个值分配给同一个变量时会发生什么?

我想知道一个函数在其中创建对象时会发生什么

当一个昂贵的操作发生并且线程冻结超过 RxJava 间隔时间时会发生什么

给我一个场景,其中发生多线程时可能会发生这种输出

当我们在@Bean中创建新类并在另一个@Bean中在@Bean中使用时会发生什么?

完全使用WebContainer线程池(WebSphere)并收到新请求时会发生什么?

当我在lambda函数中启动新线程并返回时会发生什么

当我们有多个 Java 线程时,运行时会发生什么?