python中设置线程池最大数量不管用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中设置线程池最大数量不管用相关的知识,希望对你有一定的参考价值。

参考技术A 使用线程池可以有效地控制系统中并发线程的数量。当系统中包含有大量的并发线程时,会导致系统性能急剧下降,甚至导致 Python 解释器崩溃,而线程池的最大线程数参数可以控制系统中并发线程的数量不超过此数。

我应该在数据库连接字符串中设置最大池大小吗?如果我不这样做会怎样?

【中文标题】我应该在数据库连接字符串中设置最大池大小吗?如果我不这样做会怎样?【英文标题】:Should I set max pool size in database connection string? What happens if I don't? 【发布时间】:2011-12-08 16:55:18 【问题描述】:

这是我的数据库连接字符串。直到现在我才设置最大池大小。

public static string srConnectionString = 
                       "server=localhost;database=mydb;uid=sa;pwd=mypw;";

那么目前我的应用程序支持多少个连接?增加连接池大小的正确语法是什么?

应用程序是用 C# 4.0 编写的。

【问题讨论】:

如果您没有问题,请将其保留为默认值。 目前是,但我认为这可能会在高峰时刻引起问题。所以我更喜欢设置高于默认值。我读到默认是 100 我对吗? 默认连接池大小 100 由 Microsoft 在docs.microsoft.com/en-us/dotnet/framework/data/adonet/… 和可能的其他地方记录。 【参考方案1】:

对于 Spring yml 配置:

spring:
  datasource:
    url: $DB-URL
    driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
    username: $DB-USERNAME
    password: $DB-PASSWORD
    hikari:
      auto-commit: true
      maximum-pool-size: 200

application-prod.properties 文件:

spring.datasource.hikari.maximum-pool-size=200

【讨论】:

【参考方案2】:

我们可以通过以下方式定义最大池大小:

                <pool> 
               <min-pool-size>5</min-pool-size>
                <max-pool-size>200</max-pool-size>
                <prefill>true</prefill>
                <use-strict-min>true</use-strict-min>
                <flush-strategy>IdleConnections</flush-strategy>
                </pool>

【讨论】:

这是什么文件? 不清楚这是什么文件,如果是webconfig那么我们应该在哪里添加这个标签。【参考方案3】:

“目前是,但我认为它可能会在高峰时刻引起问题” 我可以确认,我遇到了由于峰值请求而导致超时的问题。设置最大池大小后,应用程序运行没有任何问题。 IIS 7.5 / ASP.Net

【讨论】:

这不是答案【参考方案4】:

目前您的应用程序支持池中的 100 个连接。如果要将 conn 字符串增加到 200,则如下所示:

public static string srConnectionString = 
                "server=localhost;database=mydb;uid=sa;pwd=mypw;Max Pool Size=200;";

您可以通过在数据库中执行sp_who 过程来调查您的应用程序使用了多少与数据库的连接。在大多数情况下,默认连接池大小就足够了。

【讨论】:

除了通过连接字符串设置最大和最小池大小之外,还有其他方法吗?我宁愿用代码来做...... 将“最大池大小”设置为 30 时会发生什么。当所有插槽都充满“使用中”和“空闲连接”时,空闲连接会自动关闭以使新连接的空间? @Pierre - 您将收到类似于以下内容的错误:System.InvalidOperationException: Timeout expired。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。在 System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) 在 System.Data.SqlClient.SqlConnection.Open() 默认情况下100个连接的参考是什么? 文档文章 SQL Server 连接池 (ADO.NET) 的“添加连接”部分的第一段指出 100 是默认的最大池大小。 (docs.microsoft.com/en-us/dotnet/framework/data/adonet/…) 见 2019-09-14

以上是关于python中设置线程池最大数量不管用的主要内容,如果未能解决你的问题,请参考以下文章

java 如何获得线程池中正在执行的线程数?

8-29 实战技巧:如何设置线程池

线程池浅析

如何在 Spring Webflux / WebClient 中设置事件循环池大小?

Java面试小短文当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务?

Java面试小短文当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务?