当前位置:首页 > MySQL教程 > 正文内容

怎样完成python3完成并发接见程度切分表【MySQL教程】,mysql,python

搜教程4年前 (2019-12-01)MySQL教程159

本篇文章给人人带来的内容是关于怎样完成python3完成并发接见程度切分表,有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。

场景申明

假定有一个mysql表被程度切分,疏散到多个host中,每一个host具有n个切分表。
假如须要并发去接见这些表,疾速获得查询效果, 应当怎么做呢?
这里供应一种计划,应用python3的asyncio异步io库及aiomysql异步库去完成这个需求。

代码演示

import logging
import random
import asynciofrom aiomysql 
import create_pool
# 假定mysql表疏散在8个host, 每一个host有16张子表
TBLES = {    "192.168.1.01": "table_000-015", 
# 000-015示意该ip下的表明从table_000一向一连到table_015
    "192.168.1.02": "table_016-031",  
      "192.168.1.03": "table_032-047",   
       "192.168.1.04": "table_048-063",  
         "192.168.1.05": "table_064-079",   
          "192.168.1.06": "table_080-095",  
            "192.168.1.07": "table_096-0111",  
              "192.168.1.08": "table_112-0127",
}
USER = "xxx"PASSWD = "xxxx"# wrapper函数,用于捕获非常def query_wrapper(func):
    async def wrapper(*args, **kwargs):
        try:
            await func(*args, **kwargs)        except Exception as e:
            print(e)    return wrapper
            # 现实的sql接见处置惩罚函数,经由过程aiomysql完成异步非壅塞要求@
            query_wrapperasync def query_do_something(ip, db, table):
    async with create_pool(host=ip, db=db, user=USER, password=PASSWD) as pool:
        async with pool.get() as conn:
            async with conn.cursor() as cur:
                sql = ("select xxx from {} where xxxx")
                await cur.execute(sql.format(table))
                res = await cur.fetchall()        
  # then do something...# 生成sql接见行列, 行列的每一个元素包括要对某个表举行接见的函数及参数def gen_tasks():
    tasks = []    for ip, tbls in TBLES.items():
        cols = re.split('_|-', tbls)
        tblpre = "_".join(cols[:-2])
        min_num = int(cols[-2])
        max_num = int(cols[-1])     
           for num in range(min_num, max_num+1):
            tasks.append(
               (query_do_something, ip, 'your_dbname', '{}_{}'.format(tblpre, num))
            )

    random.shuffle(tasks)   
     return tasks# 按批量运转sql接见要求行列def run_tasks(tasks, batch_len):
    try:    
        for idx in range(0, len(tasks), batch_len):
            batch_tasks = tasks[idx:idx+batch_len]
            logging.info("current batch, start_idx:%s len:%s" % (idx, len(batch_tasks))) 
                       for i in range(0, len(batch_tasks)):
                l = batch_tasks[i]
                batch_tasks[i] = asyncio.ensure_future(
                    l[0](*l[1:])
                )
            loop.run_until_complete(asyncio.gather(*batch_tasks))  
              except Exception as e:
        logging.warn(e)# main要领, 经由过程asyncio完成函数异步挪用def main():
    loop = asyncio.get_event_loop()

    tasks = gen_tasks()
    batch_len = len(TBLES.keys()) * 5   # all up to you
    run_tasks(tasks, batch_len)

    loop.close()

以上就是怎样完成python3完成并发接见程度切分表的细致内容,更多请关注ki4网别的相干文章!

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/15567.html

标签: mysqlpython
分享给朋友:

“怎样完成python3完成并发接见程度切分表【MySQL教程】,mysql,python” 的相关文章

MYSQL数据库服务器高iowait怎样优化【MySQL教程】,iowait,MYSQL,服务器

一个数据库服务器高iowait的优化案例 1.开辟反应某一测试环境sql运转迟缓,而在其他测试环境该sql运转很快。两个环境其设置雷同,均只布置了mysql服务器。 2.实行top敕令发明sql运转迟缓的机械上磁盘iowait较sql运转较快的机械凌驾许多。推想这是以致sql运转迟缓的主因,...

关于门生信息管理体系的知识点【MySQL教程】,管理系统,知识点,信息

关于门生信息管理体系的知识点【MySQL教程】,管理系统,知识点,信息

一、variant数据范例诠释: 变量定义的一种变体范例 意义是:我如今定义了这个变量,然则我并不肯定未来对他给予什么范例来操纵,所以就先临时向内存借一个位置(空间)放下变量.等未来实际操纵的时刻动态的根据需要为该变量给予响应范例 二、历程当中的exit sub exit sub 的作...

mysql数据库在Centos7下没法长途衔接的缘由以及处理详解【MySQL教程】,Centos7,mysql,数据库

MySQL是由Oracle公司开辟的开源SQL数据库治理体系,下面这篇文章重要给人人引见了关于在Centos7下没法长途衔接mysql数据库的缘由与处理要领,文中经由过程示例代码引见的异常细致,须要的朋侪能够参考自创,下面来一同看看吧。 媒介 近来在工作中遇到一个题目,发如今Centos7体...

mysql中update与insert经常使用详解【MySQL教程】,update,insert,mysql

mysql中update与insert经常使用详解【MySQL教程】,update,insert,mysql

本文主要内容: update更新,batch批量更新 insert 数据到表中,将表中数据插进去到另一个表中 insert ignore疏忽反复数据插进去报错题目 update更新,batch批量更新 set sql_safe_updates=0;# 通例updateup...

Mysql的编译装置以及简朴引见【MySQL教程】,Mysql,简单,以及

Mysql的编译装置以及简朴引见【MySQL教程】,Mysql,简单,以及

==========MYSQL事情原理图: 1》数据库简介:简朴的说数据库(database)就是一个存储数据的堆栈,它将数据根据特定的规律存储到磁盘上,经由过程数据库治理体系,能够有用的治理存储在数据库中 的数据; SQL言语: DBMS是经由过程SQL言语来举行数据库治理的。SQL言...

MySQL两种引擎的有什么区别【MySQL教程】,MySQL,区别,什么

Innodb引擎 Innodb引擎供应了对数据库ACID事件的支撑,而且完成了SQL规范的四种断绝级别。该引擎还供应了行级锁和外键束缚,它的设想目的是处置惩罚大容量数据库系统,它本身实在就是基于MySQL背景的完全数据库系统,MySQL运行时Innodb会在内存中竖立缓冲池,用于缓冲数据和索引。然...