以下是PyMongo连接的简单测试片段:
from pymongo import MongoClient
clients = []
for i in range(0,1000):
con = MongoClient('mongodb://localhost:27017/')
clients.append(con)
print(i)
以下是输出:
......998 999
以下是MongoDB控制台中的输出:
2018-03-24T20:00:55.746 0530 I网络[listener]连接已从127.0.0.1:51272#1500(现在有1000个连接打开)接受2018-03-24T20:00:55.747 0530 I网络[conn1500]从127.0.0.1:51272 conn:{驱动程序:{名称:“PyMongo”,版本:“3.6.1”,操作系统:{type:“Darwin”,名称:“Darwin”,体系结构:“x86_64”,版本:“10.1”},平台:“CPython 3.6.0.final.0”}2018-03-24T20:00:55.773 0530 I网络[conn1486]端连接127.0.0.1:51286(999个连接现在打开)2018-03-24T20:00:55.773 0530 I网络[conn1485]端连接127.0.0.1:51285(998个连接现在打开)2018-03-24T20:00:55.773 0530 I网络[conn1484]端连接127.0.0.1:51284(997个连接现在打开)。
我看到MongoClient有一个关键字参数maxPoolSize
。默认值只有100。
但是上面的代码是如何工作的呢?
MongoClient有一个关键字参数maxPoolSize。默认值只有100。
没错。PyMongo(从v3.6开始)MongoClient中的maxPoolSize
默认值为100。但是,maxPoolSize
参数控制每个MongoDB服务器上MongoClient实例的最大内置连接池。
您的示例片段创建了1000个MongoClient实例。请注意,每个进程只需要一个MongoClient,并将其重用于所有操作。为每个请求创建一个新客户端是一个常见的错误,这是非常低效的。
但是上面的代码是如何工作的呢?
如果您想检查限制是否有效,可以使用Python线程模块创建线程来测试MongoClient连接的限制。
您还可以使用另外两个参数:
>
waitQueueTimeoutMS
:此参数设置线程在从池中获得连接之前应在队列中等待多长时间。通过设置低maxPoolsize
和低waitQueueTimeoutMS
您的代码将收到ConnectionFailure异常。
例子:
def worker(num, db):
print("Thread number %s" % num)
try:
print(db.test.insert({"a":num, "b":num*2}))
except Exception as e:
print("Exception: %s" % e)
return
client = MongoClient("mongodb://localhost:27017/",
maxPoolSize=1,
waitQueueTimeoutMS=1,
waitQueueMultiple=1)
database = client.test
threads = []
for i in range(100):
t = threading.Thread(target=worker, args=(i, database))
threads.append(t)
# Start thread.
t.start()
# Wait for all threads to complete.
for t in threads:
t.join()
看看连接池在PyMongo中是如何工作的?更多细节。请使用提供的默认值,除非您有需要更改上述值的特定用例。
问题内容: 我遇到了一个无法解决的SQL愚蠢问题。 错误: 有人可以帮我吗? 问题答案: 仅在字段上可接受。字段必须保留为空的默认值,或者根本不保留任何默认值- 默认值必须为常量值,而不是表达式的结果。 相关文档:http : //dev.mysql.com/doc/refman/5.0/en/data-type- defaults.html 您可以通过在表上设置插入后触发器以在任何新记录上填充“
我正在学习一个在线课程,包括创建一个Wordpress插件。当我尝试按照说明(并使用提供的代码排除我这边的任何错误)创建自定义表时,出现了一个问题。这是原始代码的一部分: MySQL(意大利语)的本地设置可能会产生任何问题吗?MySQL版本为::5.7.21-0Ubuntu0.16.04.1-(Ubuntu)。PHP版本7.0.22。Wordpress版本:4.9.2。谢谢你。
问题内容: 在我的应用程序中,我有一个“编辑用户详细信息”页面,我想在相应的editText字段中显示当前名称,电子邮件地址等,然后用户可以删除它们并根据需要输入一个新名称。 有没有办法做到这一点?谢谢你的帮助 问题答案: 您可以用来设置EditText字段的当前文本。 例:
问题内容: 我正在使用Hibernate来持久化该bean。 有什么用? 问题答案: CascadeType 默认为空数组 。请参见注释类型OneToOne中的CascadeType。 默认情况下,没有操作级联。
问题内容: 如何在Doctrine 2中设置默认值? 问题答案: 数据库默认值不受“便携式”支持。使用数据库默认值的唯一方法是通过mapping属性,在该属性中为字段所映射的列指定代码段(包括原因在内)。 您可以使用: 最好使用PHP级别的默认值,因为这些值也可以在新创建和持久保存的对象上正确使用(持久保存新对象以获取默认值后,Doctrine不会返回数据库)。
问题内容: 无法找到文档中的默认值 https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/query-dsl- minimum-should- match.html 是还是,还是取决于查询是否具有正义或上下文? 问题答案: 默认值取决于查询和上下文: :在查询上下文中且单独存在(否或) :在过滤器上下文中(例如,在查询