我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python使用多线程备份数据库的步骤

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python使用多线程备份数据库的步骤

目录
  • 一、为什么要用线程池
  • 二、线程池练习
    • 演示例子1:使用submit方法
    • 演示例子2:使用map方法
  • 三、线上数据库测试
    • 总结:

      一、为什么要用线程池

      多线程比单线程运行要快很多,比如在我工作中,每台服务器至少8个库以上,用单线程备份太慢了。

      不是越多线程就会越好,而是根据服务器的资源来合理定义worker线程,否则会造成服务器严重负载,影响到线上业务。

      备份数据库都是消耗IO操作,用多线程比多进程稍微会更有优势。

      从Python3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor (线程池)和ProcessPoolExecutor (进程池)两个类。
      相比 threading 等模块,该模块通过 submit 返回的是一个 future 对象,它是一个未来可期的对象,通过它可以获悉线程的状态主线程(或进程)中可以获取某一个线程(进程)执行的状态或者某一个任务执行的状态及返回值:
      主线程可以获取某一个线程(或者任务的)的状态,以及返回值。
      当一个线程完成的时候,主线程能够立即知道。
      让多线程和多进程的编码接口一致。 

      二、线程池练习

      演示例子1:使用submit方法

      
      from concurrent.futures import ThreadPoolExecutor
      import time
       
      def test_thread(sec):
          time.sleep(sec)
          print(f"sleep {sec} done")
          return sec
       
      with ThreadPoolExecutor(max_workers=4) as t:  # 创建一个最大容纳数量为4的线程池
          task1 = t.submit(test_thread, 1)
          task2 = t.submit(test_thread, 2)  # 通过submit提交执行的函数到线程池中
          task3 = t.submit(test_thread, 3)
       
          print(f"task1: {task1.done()}")  # 通过done来判断线程是否完成
          print(f"task2: {task2.done()}")
          print(f"task3: {task3.done()}")
       
          time.sleep(2.5)
          print(f"task1: {task1.done()}")
          print(f"task2: {task2.done()}")
          print(f"task3: {task3.done()}")
          print(task1.result())  # 通过result来获取返回值

      结果输出:

      
      task1: False
      task2: False
      task3: False
      sleep 1 done
      sleep 2 done
      task1: True
      task2: True
      task3: False
      1
      sleep 3 done

      使用 with 语句 ,通过 ThreadPoolExecutor 构造实例,同时传入 max_workers 参数来设置线程池中最多能同时运行的线程数目。
      使用 submit 函数来提交线程需要执行的任务到线程池中,并返回该任务的句柄(类似于文件、画图),注意 submit() 不是阻塞的,而是立即返回。
      通过使用 done() 方法判断该任务是否结束。上面的例子可以看出,提交任务后立即判断任务状态,显示3个任务都未完成。在延时2.5后,task1 和 task2 执行完毕,task3 仍在执行中。

      演示例子2:使用map方法

      
      import time
      from concurrent.futures import ThreadPoolExecutor
       
      def spider(page):
          time.sleep(page)
          return page
       
      start = time.time()
      executor = ThreadPoolExecutor(max_workers=4)
       
      i = 1
      for result in executor.map(spider, [2, 3, 1, 4]):
          print("task{}:{}".format(i, result))
          i += 1

      结果输出:

      
      task1:2
      task2:3
      task3:1
      task4:4

      from concurrent.futures import ThreadPoolExecutor有两种方式,一种是submit()函数,另一种是map()函数,两者的主要区别在于:
      1.map可以保证输出的顺序, submit输出的顺序是乱的
      2.如果你要提交的任务的函数是一样的,就可以简化成map。但是假如提交的任务函数是不一样的,或者执行的过程之可能出现异常(使用map执行过程中发现问题会直接抛出错误)就要用到submit()
      3.submit和map的参数是不同的,submit每次都需要提交一个目标函数和对应的参数,map只需要提交一次目标函数,目标函数的参数放在一个迭代器(列表,字典)里就可以。

      三、线上数据库测试

      环境:centos6,数据库版本5.7,数据备份2个1.7G、一个800M、一个200M

      第一种:shell脚本for的方式备份4个数据库

      
      #!/bin/bash
      backup_path="/data/backup/"
      myuser="root"
      mypwd="123456"
      db_name="test_1000"
      current_time=$(date +%Y%m%d%H%M%S)
      for i in $(seq 4);do
          /usr/local/mysql/bin/mysqldump -u${myuser} -p${mypwd} --single-transaction --master-data=2 --set-gtid-purged=off "${db_name}${i}" | gzip > ${backup_path}/"${db_name}${i}"_${current_t
      ime}.sql.gz
      done

      查看执行时间  

      
      mysqldump: [Warning] Using a password on the command line interface can be insecure.
      mysqldump: [Warning] Using a password on the command line interface can be insecure.
      mysqldump: [Warning] Using a password on the command line interface can be insecure.
      mysqldump: [Warning] Using a password on the command line interface can be insecure.
       
      real    4m28.421s
      user    3m50.360s
      sys     0m5.962s

      第二种方式:多线程备份  

      可以明显看到优势

      总结:

      在服务器上有需要备份多个数据库时,使用python多线程的方式比传统的shell脚本循环备份会更有优势,可以充分利用服务器上的资源,有效提升效率。

      以上就是python使用多线程备份数据库的步骤的详细内容,更多关于python 多线程备份数据库的资料请关注编程网其它相关文章!

      免责声明:

      ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

      ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

      python使用多线程备份数据库的步骤

      下载Word文档到电脑,方便收藏和打印~

      下载Word文档

      猜你喜欢

      python使用多线程备份数据库的步骤

      目录一、为什么要用线程池二、线程池练习演示例子1:使用submit方法演示例子2:使用map方法三、线上数据库测试总结:一、为什么要用线程池 1.多线程比单线程运行要快很多,比如在我工作中,每台服务器至少8个库以上,用单线程备份太慢了。 2
      2022-06-02

      Oracle使用RMAN备份数据库的流程步骤

      目录1. 准备工作2. 启动 RMAN3. 配置 RMAN 设置4. 进行全备份5. 进行增量备份6. 备份归档日志7. 验证备份8. 删除过期备份示例脚本备份脚本9. 恢复数据库总结1. 准备工作在开始备份之前,需要确保以下几点:已安
      Oracle使用RMAN备份数据库的流程步骤
      2024-09-08

      ecshop数据库备份和数据库恢复的步骤

      1、数据库备份 如图 1 所示:(1)备份类型: 有四种备份类型: 全部备份: 就是备份ECShop所有的表。一般选择这个方式,这个方式可以在灾难恢复的时候快速恢复。 标准备份www.cppcns.com:备份一些常用的表。 最小备份: 备
      2022-06-12

      mongodb数据库备份的步骤是什么

      MongoDB数据库备份的步骤如下:使用mongodump命令备份数据库在命令行中运行mongodump命令来备份整个数据库或指定的集合。例如,要备份名为mydb的数据库,可以运行以下命令:mongodump --db mydb如果要备
      mongodb数据库备份的步骤是什么
      2024-04-10

      SQL Server备份数据库的完整步骤

      目录一.首先把当前的数据库备份成一个文件1.按照操作来,选择对应的数据库,2.然后可以通过该备份文件还原数据库。二.第二种方法复制数据库1.右键数据库的属性2.右键数据库点击任务,分离。总结一.首先把当前的数据库备份成一个文件1.按照操作
      2022-06-14

      sqlserver数据库备份的步骤是什么

      登录到 SQL Server Management Studio。在对象资源管理器中,右键单击要备份的数据库,选择“任务” > “备份”。在“备份数据库”对话框中,选择要备份的数据库。在“备份类型”下拉菜单中,选择完整备份、差异备份或日志备
      sqlserver数据库备份的步骤是什么
      2024-04-09

      阿里云数据库恢复备份文件的详细步骤

      在使用阿里云数据库的过程中,可能会遇到各种问题,其中可能就包括数据库的备份文件丢失。这时候,我们需要了解如何恢复阿里云数据库的备份文件。本文将详细说明如何操作。步骤1:登录阿里云控制台首先,我们需要登录阿里云的控制台。在控制台的右上角,点击"登录"按钮,然后按照提示输入账号和密码进行登录。步骤2:找到阿里云数据库
      阿里云数据库恢复备份文件的详细步骤
      2023-12-09

      SQLServer数据库的更改默认备份目录的详细步骤

      这篇文章主要介绍了SQLServer数据库的更改默认备份目录的详细步骤,需要的朋友可以参考下
      2023-05-16

      用python备份mysql数据库的脚本

      一、前言             刚刚开始学python,还在看一套简单的python教学视频,但还未看完,简单的写了个mysql备份脚本,也算是第一个python脚本的×××座哈~~,因为才刚刚才开始,对python 的class 、fu
      2023-01-31

      MySQL数据库备份之mysqldump的使用

      原文:https://www.cnblogs.com/tiaopixiaonaofu/p/13976681.html
      MySQL数据库备份之mysqldump的使用
      2016-12-02

      SQL Server 数据库的更改默认备份目录的详细步骤

      本文也适用与最新的sqlserver2008 2016 2019版本打开 SSMS选择数据库,右键,属性选择“权限”,点击“查看服务器权限”选择“数据库设置”,修改
      2023-04-19

      使用Python连接MySQL数据库进行编程的步骤详解

      目录1.连接到mysql数据库2.创建表3.插入/更新数据4.查询数据5. 异常处理6.小结PostgreSQL等。本教程将重点介绍使用python连接MySQL数据库进行编程。 MySQL是一种常见的关系型数据库,我们可以使用Python
      2023-06-10

      云服务器数据备份到多台电脑上的操作步骤

      1.选择备份工具选择适合你的需求的备份工具。有很多备份工具可供选择,例如rsync、Duplicity、BorgBackup等。这些工具都有各自的特点和优势,你可以根据自己的需求选择最适合的工具。2.安装备份工具在每台电脑上安装选择的备份工具。根据备份工具的官方文档或指南,下载并安装备份工具。确保你在每台电脑上都安装了相同版本的备份工具,以确保兼容性。3.配置备份工具在每台电脑上配置备份工具,以便能够连接到云服务器并进行备份...
      2023-10-27

      阿里云虚拟机数据库备份的位置及操作步骤

      本文将介绍在阿里云上如何找到虚拟机数据库备份的位置,并提供详细的步骤指导用户如何进行数据库备份操作。在使用阿里云虚拟机服务时,数据库备份是非常重要的一项任务。通过定期备份数据库,可以确保数据的安全性和可靠性。下面我们将介绍如何在阿里云上找到虚拟机数据库备份的位置以及如何进行备份操作。首先,登录阿里云控制台,在左侧
      阿里云虚拟机数据库备份的位置及操作步骤
      2024-01-01

      编程热搜

      • Python 学习之路 - Python
        一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
        Python 学习之路 - Python
      • chatgpt的中文全称是什么
        chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
        chatgpt的中文全称是什么
      • C/C++中extern函数使用详解
      • C/C++可变参数的使用
        可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
        C/C++可变参数的使用
      • css样式文件该放在哪里
      • php中数组下标必须是连续的吗
      • Python 3 教程
        Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
        Python 3 教程
      • Python pip包管理
        一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
        Python pip包管理
      • ubuntu如何重新编译内核
      • 改善Java代码之慎用java动态编译

      目录