返回顶部
首页 > 资讯 > 后端开发 > Python >python3实现并发访问水平切分表的方法
  • 263
分享到

python3实现并发访问水平切分表的方法

2024-04-02 19:04:59 263人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关python3实现并发访问水平切分表的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。场景说明假设有一个Mysql表被水平切分,分散到多个host中,

这篇文章给大家分享的是有关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实现并发访问水平切分表的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: python3实现并发访问水平切分表的方法

本文链接: https://lsjlt.com/news/51081.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python3实现并发访问水平切分表的方法
    这篇文章给大家分享的是有关python3实现并发访问水平切分表的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。场景说明假设有一个mysql表被水平切分,分散到多个host中,...
    99+
    2024-04-02
  • springboot+mybatis拦截器方法实现水平分表操作
    目录1.前言2.MyBatis 允许使用插件来拦截的方法3、Interceptor接口 4分表实现4.1、大体思路4.2.1 Mybatis如何找到我们新增的拦截...
    99+
    2022-11-13
    springboot+mybatis拦截器 springboot+mybatis实现水平分表操作
  • 使用sharding-jdbc实现水平分库+水平分表的示例代码
    前面的文章使用sharding-jdbc实现水平分表中详细记录了如何使用sharding-jdbc实现水平分表,即根据相应的策略,将一部分数据存入到表1中,一部分数据存入到表2中,...
    99+
    2024-04-02
  • 实现数据库水平切分的两个思路
    引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分...
    99+
    2024-04-02
  • css实现水平居中的方法
    这篇文章主要介绍了css实现水平居中的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。css的基本语法是什么css的基本语法是:1、css规则由选择器和一条或多条声明两个部...
    99+
    2023-06-14
  • mybatis水平分表实现动态表名的项目实例
    目录一、水平分表二、项目实现目录结构三、扩展一、水平分表 当业务需求的数据量过大时,一个表格存储数据会非常之多,故时长采用水平分表的方式来减少每张表的数据量即是提升查询数据库时的效率...
    99+
    2024-04-02
  • springboot实现以代码的方式配置sharding-jdbc水平分表
    目录关于依赖shardingsphere-jdbc-core-spring-boot-startershardingsphere-jdbc-core数据源DataSource原Dat...
    99+
    2024-04-02
  • 解决Golang Map 并发访问问题的方法
    一分耕耘,一分收获!既然打开了这篇文章《解决Golang Map 并发访问问题的方法》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也...
    99+
    2024-04-04
  • 通过MySQL开发实现分库分表与水平扩展的项目经验分享
    通过MySQL开发实现分库分表与水平扩展的项目经验分享引言:随着大数据时代的到来,数据量的爆炸式增长使得传统的单机数据库已经无法满足业务需求。为了解决数据存储和查询的性能问题,分库分表与水平扩展成为了当下非常流行的技术。本文将分享一些通过M...
    99+
    2023-11-02
    水平扩展 项目经验分享 MySQL分库分表
  • 使用sharding-jdbc实现水平分表的示例代码
    目录在mysql中新建数据库sharding_db,新增两张结构一样的表student_1和student_2。添加依赖编写配置文件编写实体类编写mapper接口编写测试类执行测试在...
    99+
    2024-04-02
  • 分布式 PHP 缓存方案:如何实现高效的并发访问?
    随着互联网技术的飞速发展,Web 应用程序的并发访问量越来越大,如何实现高效的并发访问成为了一个急需解决的问题。在这个问题中,缓存的作用变得越来越重要。在 PHP 开发中,使用缓存可以大大提高应用程序的性能和响应速度。本文将介绍一种分布式...
    99+
    2023-09-22
    分布式 并发 缓存
  • Python3实现并发检验代理池地址的方法
    本文实例讲述了Python3实现并发检验代理池地址的方法。分享给大家供大家参考,具体如下: #encoding=utf-8 #author: walker #date: 2016-04-14 #summ...
    99+
    2022-06-04
    地址 方法
  • Div实现水平或垂直居中的方法
    本篇内容主要讲解“Div实现水平或垂直居中的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Div实现水平或垂直居中的方法”吧!先来看一个最普通的实现示例:创...
    99+
    2024-04-02
  • css实现div垂直水平居中常用方法分享
    本篇内容主要讲解“css实现div垂直水平居中常用方法分享”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css实现div垂直水平居中常用方法分享”吧!方法一:利...
    99+
    2024-04-02
  • python3+selenium4实现切换窗口与iframe的方法
    在自动化测试过程中,有时后会遇到元素定位方式没有问题,但是依旧抛出无法找到元素的异常的问题,通常情况下,如果元素定位没有问题,但还是无法找到元素,则可能是由于当前焦点不在指定页面或i...
    99+
    2024-04-02
  • python3通过gevent.pool限制协程并发数量的实现方法
    协程虽然是轻量级的线程,但到达一定数量后,仍然会造成服务器崩溃出错。最好的方法通过限制协程并发数量来解决此类问题。 server代码: #!/usr/bin/env python...
    99+
    2024-04-02
  • Android实现Activity水平和垂直滚动条的方法
    本文实例讲述了Android实现Activity水平和垂直滚动条的方法。分享给大家供大家参考,具体如下: <ScrollView xmlns:android="http...
    99+
    2022-06-06
    方法 activity 滚动条 Android
  • 通过MySQL开发实现高并发访问控制的项目经验分享
    通过MySQL开发实现高并发访问控制的项目经验分享随着互联网的快速发展,许多网站和应用程序面临着高并发访问的挑战。在这种情况下,让系统保持高可用性和良好的性能变得尤为重要。在最近的一项项目中,我经历了一个高并发访问控制的实现过程,并通过My...
    99+
    2023-11-02
    高并发 访问控制 MySQL开发
  • ubuntu16.04安装ssh服务并实现远程访问的方法
    一、查看是否安装了ssh服务 apt-cache policy openssh-client openssh-server ubuntu默认安装了openssh-client,openssh-server需要手动...
    99+
    2022-06-04
    ubuntu ssh远程访问 ubuntu 16.04 安装ssh
  • mysql实现数据切分的方法
    这篇文章主要介绍了mysql实现数据切分的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql实现数据切分的方法:1、使用数据的垂直切分...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作