iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python使用多线程备份数据库的步骤
  • 925
分享到

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

python备份数据库python多线程备份 2022-06-02 22:06:54 925人浏览 独家记忆

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

摘要

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

目录

一、为什么要用线程池

多线程比单线程运行要快很多,比如在我工作中,每台服务器至少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 多线程备份数据库的资料请关注编程网其它相关文章!

--结束END--

本文标题: python使用多线程备份数据库的步骤

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 使用Navicat进行数据库备份的基本步骤
    这篇文章主要介绍了使用Navicat进行数据库备份的基本步骤,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。使用Navicat进行数据库备份的基本...
    99+
    2024-04-02
  • 备份MySQL数据库的方法步骤
    这篇文章主要介绍“备份MySQL数据库的方法步骤”,在日常操作中,相信很多人在备份MySQL数据库的方法步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”备份MySQL数据库...
    99+
    2024-04-02
  • 步骤:如何备份MySQL数据库
    MySQL数据库备份的步骤,需要具体代码示例 数据库备份是非常重要的一项工作,它能帮助我们防止数据丢失以及在需要时恢复数据。对于MySQL数据库来说,备份数据是相对简单的操作。下面将详...
    99+
    2024-02-22
    mysql 步骤 数据库备份 sql语句 数据丢失
  • mongodb数据库备份的步骤是什么
    MongoDB数据库备份的步骤如下: 使用mongodump命令备份数据库 在命令行中运行mongodump命令来备份整个数据库...
    99+
    2024-04-10
    mongodb
  • sqlserver数据库备份的步骤是什么
    登录到 SQL Server Management Studio。 在对象资源管理器中,右键单击要备份的数据库,选择“任务”...
    99+
    2024-04-09
    sqlserve
  • SqlServer数据库备份与还原的实现步骤
    目录问题描述SqlServer数据库备份步骤SqlServer数据库还原步骤其它问题描述   最近需要给程序新增功能,用于将旧格式的数据转换为新格式,同时删除旧格...
    99+
    2024-04-02
  • Mysql数据库手动及定时备份步骤
    目录手动备份定时器备份手动备份 1)cmd控制台:mysqldump -uroot -proot 数据库名 [表名1,表名2...] > 文件路径 比如:把 demo 数据...
    99+
    2024-04-02
  • mysql定时自动备份数据库的方法步骤
    我们都知道数据是无价,如果不对数据进行备份,相当是让数据在裸跑,一旦服务器出问题,只有哭的份了。下面将介绍mysql数据库的自动备份,大家可根据情况自行选择将备份数据存放在哪里。 第...
    99+
    2024-04-02
  • 如何备份阿里云数据库备份详细步骤和策略
    阿里云数据库备份是一项重要的任务,可以保护数据免受意外丢失、灾难性事件或其他不可预见情况的影响。这篇文章将详细介绍如何备份阿里云数据库备份,包括详细的步骤和策略。 了解备份策略首先,了解阿里云的备份策略是非常重要的。阿里云提供了多种备份策略...
    99+
    2023-11-17
    备份 阿里 步骤
  • mysql——数据库备份——使用mysqldump命令备份所有数据库
    mysqldump命令备份所有数据库; 语法格式:mysqldump -u username -ppassword --all-databases  > backupname.sql --all-databases:这个选项表示后面跟一...
    99+
    2023-10-09
    数据库 mysql java sql mybatis
  • 阿里云数据库恢复备份文件的详细步骤
    在使用阿里云数据库的过程中,可能会遇到各种问题,其中可能就包括数据库的备份文件丢失。这时候,我们需要了解如何恢复阿里云数据库的备份文件。本文将详细说明如何操作。 步骤1:登录阿里云控制台 首先,我们需要登录阿里云的控制台。在控制台的右上角,...
    99+
    2023-12-09
    阿里 备份文件 步骤
  • 用python备份mysql数据库的脚本
    一、前言             刚刚开始学python,还在看一套简单的python教学视频,但还未看完,简单的写了个mysql备份脚本,也算是第一个python脚本的×××座哈~~,因为才刚刚才开始,对python 的class 、fu...
    99+
    2023-01-31
    脚本 备份 数据库
  • SQLServer数据库的更改默认备份目录的详细步骤
    本文也适用与最新的sqlserver2008 2016 2019版本 打开 SSMS 选择数据库,右键,属性 选择“权限”,点击“查看服务器权限...
    99+
    2023-05-16
    SQL Server默认备份目录
  • Navicat Premium12进行数据库定期自动备份的方法步骤
    上一篇我们刚刚安装好破解版的navicat,这一篇我们就做一个数据库的定时备份任务吧 首先我们连接数据库,这里我使用mysql数据库做示范,其他的数据库备份也是一样的 点击自动运行...
    99+
    2024-04-02
  • SQL Server 数据库的更改默认备份目录的详细步骤
    本文也适用与最新的sqlserver2008 2016 2019版本 打开 SSMS 选择数据库,右键,属性 选择“权限”,点击“查看服务器权限” 选择“数...
    99+
    2023-04-19
    SQL Server默认备份目录
  • Python数据抓取——多线程,异步
    本文主要是为了加快数据抓取任务,考虑使用多进程、多线程、异步原理,相关概念可以参考 https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac...
    99+
    2023-01-31
    多线程 数据 Python
  • Oracle 11g 使用RMAN备份数据库
    使用Oracle自带的备份恢复工具RMAN(Recovery Manager)具有以下几种优势:支持增量备份能自动管理备份文件自动化备份与恢复备份的文件有效性检查配置快闪恢复区(flash recovery...
    99+
    2024-04-02
  • 如何使用RMAN备份数据库
    这篇文章给大家分享的是有关如何使用RMAN备份数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Oracle推荐的数据库备份和恢复工具是RMAN(恢复管理器,Recovery ...
    99+
    2024-04-02
  • 云服务器数据备份到多台电脑上的操作步骤
    1. 选择备份工具 选择适合你的需求的备份工具。有很多备份工具可供选择,例如 rsync、Duplicity、BorgBackup 等。这些工具都有各自的特点和优势,你可以根据自己的需求选择最适合的工具。 2. 安装备份工具 在每台电脑上...
    99+
    2023-10-27
    数据备份 操作步骤 服务器
  • 阿里云虚拟机数据库备份的位置及操作步骤
    本文将介绍在阿里云上如何找到虚拟机数据库备份的位置,并提供详细的步骤指导用户如何进行数据库备份操作。 在使用阿里云虚拟机服务时,数据库备份是非常重要的一项任务。通过定期备份数据库,可以确保数据的安全性和可靠性。下面我们将介绍如何在阿里云上找...
    99+
    2024-01-01
    阿里 备份 虚拟机
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作