1. 写代码备份mysql数据库:

 1)Linux下,备份mysql数据库,在shell下执行命令:mysqldump -uroot -p123456 -A >db_bak.sql即可

import os
import datetime class BakDb(object):
def __init__(self, ip, username, passwd, port=3306, path='/tmp/db_bak'):
self.ip = ip
self.username = username
self.passwd = passwd
self.port = port
self.path = path def check_path_exist(self):
if not os.path.isdir(self.path):
os.mkdir(self.path) def bak_db(self):
# mysqldump -u%s -p%s -h%s -A > **.sql
filename = str(datetime.date.today()) + '.sql'
self.check_path_exist()
abs_file = os.path.join(self.path, filename) # 变为绝对路径
command = '''
mysqldump -u{username} -p{passwd} -P{port} -h{ip} -A > {filename}
'''.format(username=self.username,
passwd=self.passwd,
port=self.port,
ip=self.ip,
filename=abs_file)
print(command)
os.system(command)
print("数据库备份完成") obj = BakDb('**.**.**.**', 'user', 'passwd')
obj.bak_db()

2. 重写父类的方法:核心思想就是先调用父类的方法,然后加新的代码就ok了,目的是扩展父类的一些功能。

class Coon(object):
# 基类
def __init__(self, host, passwd, port):
self.host = host
self.passwd = passwd
self.port = port
print(self.port)
print(self.host, self.passwd, self.port) class ConnMysql(Coon):
def __init__(self, host, passwd, port, username, db, charset='utf-8'):
Coon.__init__(self, host, passwd, port) # 调用父类的构造方法,得自己手动找到父类
# super(ConnMysql).__init__(self,host,passwd,port) # super会自动找到父类,然后调用父类的方法
self.username = username
self.db = db
self.charset = charset
print(self.host, self.passwd, self.port, self.username, self.db, self.charset) sObj = Coon('1', '1', 3306)
obj = ConnMysql('1', '2', 3306, 'q', 'qxy') 运行结果:
3306
1 1 3306
3306
1 2 3306
1 2 3306 q qxy utf-8

3. 单元测试-unittest框架:

import unittest
import HTMLTestRunner
from BeautifulReport import BeautifulReport def calc(x, y):
return x + y class TestCalc(unittest.TestCase):
def setUp(self):
print('我是setUp') def test_pass_case(self):
'''这个是通过的测试用例'''
res = calc(1, 2)
self.assertEqual(3, res) def test_fail_case(self):
'''这个是失败的测试用例'''
res = calc(9, 8)
self.assertEqual(98, res) def test_a(self):
'''这是个普通的测试用例'''
pass def test_haha(self):
'''这是哈哈哈测试用例''' def tearDown(self):
print('我是tearDown') @classmethod
def setUpClass(cls):
# 所有的用例执行前运行一次
print('我是setUpClass') @classmethod
def tearDownClass(cls):
# 所有的用例运行完成后运行一次
print('我是tearDownClass') if __name__ == '__main__':
unittest.main() # 会运行当前python文件中的所有测试用例 # suite = unittest.TestSuite() # 定义一个测试套件
# suite.addTest(TestCalc('test_pass_case'))# addTest的参数是TestCase实例或TestSu
# suite.addTest(TestCalc('test_fail_case'))
# suite.addTest(TestCalc('test_a')) # 单个添加测试用例 # suite.addTests(unittest.makeSuite(TestCalc)) # addTests的参数是由测试用例或测试套件组成 # f = open('report.html', 'wb')
# runner = HTMLTestRunner.HTMLTestRunner(stream=f,title='测试报告',descriptio
# runner.run(suite) # BeautifulReport包能够生成界面更好看的测试报告
# result = BeautifulReport(suite)
# result.report(filename='reportB.html',description='测试报告',log_path='.')

  2)还有一种写法,将所有的case写在一个目录下,然后写一个运行所有case的代码:

import unittest
from BeautifulReport import BeautifulReport
import xmlrunner # pip inttall xmlrunner
suite = unittest.TestSuite()
# TestLoader是用来加载TestCase到TestSuite中的
all_case = unittest.defaultTestLoader.discover('cases', 'test*.py') # 第一个参数是目录,第二个参数是以test开头的是用例文件
for case in all_case:
suite.addTests(case) # case的类型是<class 'unittest.suite.TestSuite'>
print(suite)
# 列表生成式
# [ suite.addTests(case) for case in all_case ] result = BeautifulReport(suite)
result.report(filename='report_all_case.html', description='测试报告', log_path='.') # runner = xmlrunner.XMLTestRunner('.') # 为了产生xml格式的报告给Jenkins用,在当前目录生成报告
# runner.run(suite) # 运行用例
test_buy.py

import unittest

class TestBuy(unittest.TestCase):
def test_a(self):
self.assertEqual(1, 1) def test_b(self):
self.assertEqual(1, 2)

4. 多线程:

 1)咱们打开的程序都是进程,进程中至少有个一个线程

2)线程包含在进程里,线程是最小的执行单元,线程之间是相互独立的

3)主线程起了n个子线程之后,继续执行至结束,子线程可能仍在执行,子线程干活时间未统计上,

      所以要告诉主线程要等子线程执行完成后再结束程序
import threading
import time
import requests def sayHi(name):
time.sleep(2)
print(name) def downHtml(url, name):
content = requests.get(url).content
f = open(name, 'wb')
f.write(content)
f.close() urls = [
['nnzhp', 'http://www.nnzhp.cn'],
['dsx', 'http://www.imdsx.cn'],
['besttest', 'http://www.besttest.cn']
]
# 单线程运行
# start_time = time.time()
# for url in urls:
# downHtml(url[1], url[0])
# end_time = time.time()
# print(end_time-start_time) # 多线程运行
start_time = time.time()
threads = []
for url in urls:
t = threading.Thread(target=downHtml, args=(url[1], url[0])) # 启动一个线程
t.start() # 运行
# 等待子线程干完活
# t.join() # 主线程起了一个子线程后,等待子线程运行结束;再循环下一次起一个新的线程
threads.append(t)
for t in threads: # 主线程一直循环等待3个子线程 直到它们都干完活
t.join() # 主线程等待子线程
end_time = time.time()
print(end_time - start_time) # for i in range(10):
# t = threading.Thread(target=sayHi, args=('小黑',)) # 启动一个线程,这里小黑后面要加个逗号
# t.start() # 运行

  4) 多进程模块

import multiprocessing
import time def run():
time.sleep(2)
print("多进程")
for i in range(5):
p = multiprocessing.Process(target=run2)
p.start() def run2():
print("多进程启动") if __name__ == '__main__':
for i in range(5):
p = multiprocessing.Process(target=run)
p.start()

  5) 守护进程

import threading
import time def pz():
time.sleep(2)
print('跟班') threads = []
for i in range(50):
t = threading.Thread(target=pz)
t.setDaemon(True) # 设置子线程为守护线程,守护线程:一旦主线程立刻结束,那么子线程立刻结束,不管子线程有没有运行完,
t.start()
threads.append(t)
# for t in threads:
# t.join() # 如果线程调用t.join(),守护线程就不起作用了
time.sleep(3)
print('done') # 不加t.join(), 先打印done,后打印50个跟班

  6) 线程锁

import threading
from threading import Lock num = 0
lock = Lock() # 申请一把锁 def run():
global num
lock.acquire() # 加锁
num += 1
lock.release() # 解锁 lis = []
for i in range(5):
t = threading.Thread(target=run)
t.start()
lis.append(t)
for t in lis:
t.join()
print('over', num)
# 加锁是为了防止多线程时同时修改数据,可能会导致数据不正确。
# python3中不加锁也无所谓,

  7) cpu是几核的,就只能同时运行几个进程,python的多线程是利用不了多核cpu的,GIL 全局解释器锁

    在python上开启多个线程,由于GIL的存在,每个单独线程都会在竞争到GIL后才运行,这样就干预OS内部的进程(线程)调度,

    所以在多核CPU上:python的多线程实际是串行执行的,并不会同一时间多个线程分布在多个CPU上运行。     
8) IO密集型任务:使用io比较多,如大批量网络请求,大量的输入输出,可以使用多线程。
   cpu密集型任务:使用cpu比较多,如一些逻辑算法类的任务。

第9课:备份mysql数据库、重写父类、unittest框架、多线程的更多相关文章

  1. 批处理命令 BAT备份MySQL数据库

    批处理命令 BAT备份MySQL数据库 作者: 字体:[增加 减小] 类型:转载 时间:2009-07-23我要评论 MySQL数据的备份工具也许有很多,在这我要给大家分享一下通过DOS批处理命令和M ...

  2. 利用xtrabackup备份mysql数据库

    利用xtrabackup备份mysql数据库 一.安装1.直接下载二进制文件wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2. ...

  3. 备份MySQL数据库

    备份MySQL数据库脚本: #!/bin/bash # description: MySQL buckup shell script # author: lmj # web site: http:// ...

  4. 配合crond服务实现自定义周期备份MySQL数据库(使用innobackupex进行备份)

    备份 新建一个脚本/root/backup.py,内容如下: #!/usr/bin/env python# -*- coding: utf-8 -*- ''' 脚本作者:昨夜星辰 脚本作用:配合cro ...

  5. 一个自动备份mysql数据库的bat文件内容

    自动备份mysql数据库,并已当前的日期时间为目录 copy过去, xcopy将近15年没有用dos命令,还是这么亲切 另 本方法是备份数据库文件,不是dump导出,然后再计划任务中使用,我用的是wa ...

  6. Linux 每天自动备份mysql数据库的方法

    Linux 每天自动备份mysql数据库的方法 作者: 字体:[增加 减小] 类型:转载   linux下为了安全有时候需要自动备份mysql数据库,下面是具体的实现步骤.   /usr/bin为my ...

  7. linux下使用crontab定时备份MYSQL数据库的方法:

    摘要 linux下使用crontab定时备份MYSQL数据库的方法: 只需按照下面3步做,一切都在你的掌控之下: 第一步:在服务器上配置备份目录代码: ------------------------ ...

  8. Linux自动备份MySQL数据库脚本代码

    下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且会将备份文件通过gzip压缩.需要注意的是, ...

  9. 一个备份MySQL数据库的简单Shell脚本(转)

    Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行.我们也可以逐一敲入命令手动执行.如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反 ...

随机推荐

  1. sqlite常用的命令-增删改查

    一.查看版本信息: #sqlite3 -version 二.sqlite3常用命令 1.当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识: 2. ...

  2. cmd中测试常用到的命令汇总

    1.最常用的 ping +ip 2.测试到远程服务器之间是否通的命令 telnet +ip +端口 3.路由跟踪,通过跟踪可以找到到哪地方不通 tracert ip      linux系统  tra ...

  3. 通过自动回复机器人学Mybatis笔记:接口式编程

    [接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...

  4. Eclipse配置多个jdk

    Eclipse配置多个jdk 步骤: 1,打开windows > Preferences: 2,点击“Add”,新增jdk,选择“Standard VM”: 3,下一步,选择对应版本的jer: ...

  5. 配置linux使用mail发送邮件到163邮箱

    1.进行配置 yum install -y mailx /etc/mail.rc添加对163的授权: ##########config 163 mail############set from=jso ...

  6. 20145211《网络渗透》Adobe阅读器渗透攻击

    20145211<网络渗透>Adobe阅读器渗透攻击 实验准备 1.用了一个kali,一个English Winxp3,并保证能相互ping通 2.开启显示隐藏文件 实验步骤: 1.开启m ...

  7. zsh + oh-my-zsh 默认shell

    项目地址 zsh -----> http://www.zsh.orgoh-my-zsh ----> http://ohmyz.sh The last shell you’ll ever n ...

  8. 设置CentOS7虚拟机使用静态IP上网

    一.在VMware里,依次点击”编辑“ - ”虚拟网络编辑器“,如下图,我选择的是NAT模式: 为了能够使用静态IP,这里不要勾选”使用本地DHCP服务将IP分配给虚拟机“这个选项.然后是配置子网ip ...

  9. 异步:asyncio和aiohttp的一些应用(1)

    1. asyncio 1.1asyncio/await 用法 async/await 是 python3.5中新加入的特性, 将异步从原来的yield 写法中解放出来,变得更加直观. 在3.5之前,如 ...

  10. LeetCode——3Sum

    1. Question Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? ...