连接池mysqlx.get_client ()功能如下:

进口mysqlxconnection_str“mysqlx: / /迈克:s3cr3t !@localhost: 33060”options_string{}#空文档客户端mysqlxget_clientconnection_stroptions_string会话客户端get_session()#(…)会话关闭()客户端关闭()

连接设置和选项也可以是字典:

进口mysqlxconnection_dict“主机”“localhost”“端口”33060“用户”“迈克”“密码”“s3cr3t !”options_dict{}客户端mysqlxget_clientconnection_dictoptions_dict会话客户端get_session()#(…)会话关闭()客户端关闭()

创建的所有会话mysqlx.Client.get_session ()有池连接,后被哪个关闭mysqlx.Session.close ()返回连接池,因此可以重用它。

直到现在我们还没有提供任何构型mysqlx。客户端.我们可以通过在第二个参数中传递dict或JSON文档字符串来设置池选项。

的可用选项mysqlx。客户端是:

选项“池”“启用”保龄球),# [True | False],默认为True“max_size”int),#每个池最大连接数“max_idle_time”int),连接将保持活动状态的#毫秒#当不使用时。默认为0,表示无穷大。“queue_timeout”int),#毫秒请求将等待一个连接#变为可用。默认为0,表示无穷大。

要在客户端中禁用池化,可以设置启用选项

客户端mysqlxget_clientconnection_str“池”: {“启用”}})

要定义池的最大大小,可以设置max_size选项。在下面的例子中“max_size”:5将5设置为池中允许的最大连接数。

connection_dict“主机”“localhost”“端口”33060“用户”“迈克”“密码”“s3cr3t !”options_dict“池”: {“max_size”5“queue_timeout”1000}}客户端mysqlxget_clientconnection_dictoptions_dict_范围5):客户端get_session()#将引发一个池错误:已经达到池的最大大小客户端get_session()

queue_timeout设置请求等待连接可用的最大毫秒数。默认值为0(零)和意味着无限。

下面的例子显示了必须等待会话可用的线程的使用情况:

进口mysqlx进口时间进口随机线程进口线程connection_dict“主机”“localhost”“端口”33060“用户”“迈克”“密码”“s3cr3t !”options_dict“池”: {“max_size”6“queue_timeout”5000}}schema_name“测试”collection_name“collection_test04”def工作客户端worker_number):这个方法为一个线程保存任务。参数:客户端(client):获取会话与服务器交互。Worker_number (int):工作人员的id号。”“”兰德随机随机()worker_name“Worker_{}格式worker_number打印“工作人员:{}\ n格式worker_name))#工作前打个盹,(有机会让其他线程开始)时间睡眠兰德用于产生基质的均匀分布的随机整数09/10#从客户端获取会话session1客户端get_session()#制定一个计划模式session1get_schemaschema_name#让集合放入一些文档集合模式get_collectioncollection_name#添加10个文档到集合中_范围10):集合添加({“名字”worker_name})执行()#关闭会话session1关闭()打印”工作人员:{}完成\ n格式worker_name))defcall_workers客户端job_thread工人):"""创建并启动线程。参数:client (client):获取会话。Job_thread (method):每个线程运行的方法。Workers (int):要创建的线程数。”“”workers_list[]n范围工人):workers_list附加线程目标job_threadarg游戏客户端n)))工人workers_list工人开始()#让客户端管理会话客户端mysqlxget_clientconnection_dictoptions_dict#获取一个会话来创建模式和集合session1客户端get_session()模式session1create_schemaschema_name集合模式create_collectioncollection_name#关闭会话以获得另一个空闲连接session1关闭()#调用call_workers与客户端,方法运行的线程和#线程数,在这个例子中是18个工人call_workers客户端工作18给工人一些时间做这项工作时间睡眠10session1客户端get_session()模式session1get_schemaschema_name集合模式get_collectioncollection_name打印集合找到()执行()fetch_all())

最后一次打印的输出将如下所示:

[{“_id”“00005 b770c7f0000000000000389”“名字”“Worker_2”},\“_id”“00005 b770c7f000000000000038a”“名字”“Worker_2”},\“_id”“00005 b770c7f000000000000038b”“名字”“Worker_2”},\“_id”“00005 b770c7f000000000000038c”“名字”“Worker_2”},\“_id”“00005 b770c7f000000000000038d”“名字”“Worker_2”},\“_id”“00005 b770c7f000000000000038e”“名字”“Worker_2”},\“_id”“00005 b770c7f000000000000038f”“名字”“Worker_2”},\“_id”“00005 b770c7f0000000000000390”“名字”“Worker_2”},\“_id”“00005 b770c7f0000000000000391”“名字”“Worker_2”},\“_id”“00005 b770c7f0000000000000392”“名字”“Worker_2”},\“_id”“00005 b770c7f0000000000000393”“名字”“Worker_1”},\“_id”“00005 b770c7f0000000000000394”“名字”“Worker_4”},\“_id”“00005 b770c7f0000000000000395”“名字”“Worker_1”},\“_id”“00005 b770c7f0000000000000396”“名字”“Worker_4”},\“_id”“00005 b770c7f0000000000000397”“名字”“Worker_7”},\“_id”“00005 b770c7f0000000000000398”“名字”“Worker_1”},\“_id”“00005 b770c7f0000000000000399”“名字”“Worker_4”},\“_id”“00005 b770c7f000000000000039a”“名字”“Worker_7”},\“_id”“00005 b770c7f000000000000039b”“名字”“Worker_1”},\“_id”“00005 b770c7f000000000000039c”“名字”“Worker_4”},\“_id”“00005 b770c7f000000000000039d”“名字”“Worker_7”},\“_id”“00005 b770c7f000000000000039e”“名字”“Worker_1”},\“_id”“00005 b770c7f000000000000039f”“名字”“Worker_8”},\“_id”“00005 b770c7f00000000000003a0”“名字”“Worker_4”},\“_id”“00005 b770c7f00000000000003a1”“名字”“Worker_7”},\...\“_id”“00005 b770c7f000000000000043c”“名字”“Worker_9”})

18工作人员随机轮流将他们的文档添加到集合中,只共享6活动连接由“max_size”:6options_dict在创建时赋予客户端实例mysqlx.get_client (connection_dictoptions_dict) ()