Python _ 特性(2)

一、搭建MySQL数据库与python的联系

[root@foundation50 ~]# yum install mariadb-server -y  安装服务
[root@foundation50 ~]# systemctl start mariadb  开启服务
[root@foundation50 ~]# systemctl status mariadb  查看服务状态
[root@foundation50 ~]# systemctl stop firewalld  关闭防火墙
[root@foundation50 html]# mysql_secure_installation  重置密码
Set root password? [Y/n] 
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
[root@foundation50 ~]# mysql -uroot -p  登陆
[root@foundation50 ~]# yum install gcc -y  安装
[root@foundation50 ~]# yum search MySQL-python
[root@foundation50 ~]# yum install MySQL-python.x86_64 -y  安装服务
[root@foundation50 ~]# pip install Mysql-Python  建立连接
在pycharm中导入import MySQLdb (变成灰色) 就成功了

这里写图片描述

1、搭建网页版来管理数据库:

[root@localhost ~]# yum install php httpd -y              ##安装php httpd服务
[root@localhost ~]# yum install php-mysql  -y               ##安装php-mysql服务
[root@localhost ~]# systemctl start httpd                      ##开启服务
[root@localhost ~]# systemctl stop firewalld                    ##关闭防火墙
#####这里需要有phpMyAdmin-3.4.0-all-languages.tar.bz2文件包#####
[root@localhost html]# tar jxf phpMyAdmin-3.4.0-all-languages.tar.bz2               ##解压资源包
[root@localhost html]# ls
[root@localhost html]# rm -fr *.bz2    ##删除压缩
[root@localhost html]# ls
phpMyAdmin-3.4.0-all-languages
[root@localhost html]# mv phpMyAdmin-3.4.0-all-languages/ mysqladmin              ##修改名称
[root@localhost html]# ls
mysqladmin
[root@localhost html]# cd mysqladmin/
[root@localhost mysqladmin]# cp config.sample.inc.php  config.inc.php              ##拷贝文件(软件公司使用说明上指示)

这里写图片描述

二、 python 中的 mysql 数据库

  建立好数据库和python连接之后直接导入import MySQLdb即可(就可以在python解释器中执行数据库的操作)

基本格式:

MySQL 数据库
host : MySQL 数据库地址
user: 数据库登陆用户名
passwd: 数据库登陆密码
db: 登陆数据库后,需要操作的库名
port: 数据库监听端口,默认为 3306
charset: 数据库编码MySQL连接操作
commit() 如果数据库表进行了修改,提交保存当前的数据。
rollback() 如果有权限,就取消当前的操作,否则报错
cursor() 游标指针。

1、导入 mysql 数据库的包和步骤

这里写图片描述
这里写图片描述

2、读取表,并输出表的内容

这里写图片描述

3、提交和回滚, 在数据库里交事务操作

在同一张数据表一增一减时若有一个出现错误,则两个都不会执行,会返回原来的结果,这种操作叫做回滚,不会出现数据丢失的情况

这里写图片描述
在set多写一个‘t’
这里写图片描述
不会改变
这里写图片描述

4、增(对 python 数据库添加内容)

这里写图片描述
更新成功
这里写图片描述

5、删(对 python 数据库删除内容)

这里写图片描述
删除成功
这里写图片描述

6、改(对 python 数据库修改内容)

这里写图片描述
这里写图片描述
更改成功
这里写图片描述

7、查(对 python 数据库查找内容)

以元组输出

这里写图片描述

以字典输出
这里写图片描述

8、插入多条数据

这里写图片描述
成功
这里写图片描述

三、多线程

1、概念

线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)
它被包含在进程之中,是进程中的实际运作单位。一个进程可以并发多个线程
每条线程并行执行不同的任务
(线程是进程中的一个实体,是被系统独立调度和分派的基本单元)

每一个进程启动时都会最先产生一个线程,即主线程
然后主线程会在创建其他的子线程

线程的定义

线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)
它被包括在进程之中,是进程的实际运作单位。一个进程可以并发多个线程
每条线程并行执行不同的任务
(线程是进程的一个实体,是被系统独立调度和分派的基本单元)
每一个进程启动时都会最先产生一个线程,即主线程
然后主线程会再创建其他的子线程

通常,我们写服务器处理模型的程序时,有以下几种模型

(1)每收到一个请求,创建一个新的进程,来处理该请求;
(2)每收到一个请求,创建一个新的线程,来处理该请求;
(3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求
上面的几种方式,各有千秋,
第(1)中方法,由于创建新的进程的开销比较大,所以,会导致服务器性能比较差,但实现比较简单。
第(2)种方式,由于要涉及到线程的同步,有可能会面临死锁等问题。
第(3)种方式,在写应用程序代码时,逻辑比前面两种都复杂。
综合考虑各方面因素,一般普遍认为第(3)种方式是大多数网络服务器采用的方式

线程的缺点

在UI编程中,常常要对鼠标点击进行相应,首先如何获得鼠标点击呢?
方式一:创建一个线程,该线程一直循环检测是否有鼠标点击,
那么这个方式有以下几个缺点:
CPU资源浪费,可能鼠标点击的频率非常小,但是扫描线程还是会一直循环检测,
这会造成很多的CPU资源浪费;如果扫描鼠标点击的接口是阻塞的呢?
如果是堵塞的,又会出现下面这样的问题,如果我们不但要扫描鼠标点击,
还要扫描键盘是否按下,由于扫描鼠标时被堵塞了,那么可能永远不会去扫描键盘;
如果一个循环需要扫描的设备非常多,这又会引来响应时间的问题;
所以,该方式是非常不好的。

2、一个简单的多任务问题

从执行结果看到,只会在一个任务完成了之后才会进行下一个任务,效率低下

这里写图片描述

3、将多任务问题用多线程解决,提高效率

这里写图片描述

4、线程和函数建立关系

最简单的建立
这里写图片描述

查看每一条命令的输出
这里写图片描述

5、加入了 t1.setDaemon(True)

意味着主线程不需要等待子线程啥时候结束就可以结束 但是会等到子线程结束之后一起销毁

这里写图片描述

6、加入了 t1.join(5)

表示主线程到join()就不往下走了,直到子线程进行完成

这里写图片描述

四、多线程的吃包子示例

1、操作系统(生产者消费者问题) 但是这段代码没有交互,不是动态的

这里写图片描述

2、操作系统升级版01:实现了动态化

这里写图片描述
这里写图片描述

3、操作系统升级版02版加入了que.get_nowait()加入消费者不等待会报错

这里写图片描述
这里写图片描述

4、操作系统升级版03版“做包子时间大于吃包子时间”会报错加入捕获异常

这里写图片描述
这里写图片描述

5、操作系统升级版04:实现智能化,生产者会合理的生产,消费者会等待,实现合理化

这里写图片描述
这里写图片描述

五、异步

异步的方式:模拟生活中作的事,“生产者和消费者有更加智能的交互”

这里写图片描述
这里写图片描述

六、事件驱动

1、事件驱动模型

事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。
它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发
相应的处理。另外两种常见的编程范式是(单线程)同步以及多线程编程。
目前大部分的UI编程都是事件驱动模型,如很多UI平台都会提供onClick()
事件,这个事件就代表鼠标按下事件。事件驱动模型大体思路如下:
1. 有一个事件(消息)队列;
2. 鼠标按下时,往这个队列中增加一个点击事件(消息);
3. 有个循环,不断从队列取出事件,根据不同的事件,调用不同的函数,
如onClick()、onKeyDown()等;
4. 事件(消息)一般都各自保存各自的处理函数指针,这样,每个消息都有独立的处理函数;

2、事件驱动方式更智能化的让生产者和消费者交互

这里写图片描述
这里写图片描述

七、线程安全问题

线程安全问题: 线程会出现异常无法输出正确的结果

这里写图片描述

给线程加锁可以使得正确的输出

这里写图片描述

猜你喜欢

转载自blog.csdn.net/janenancy/article/details/81216944