# gil锁
# 全局解释器锁,Cpython解释器下有的
# 导致了python的多线程不能利用多核(不能并行)
# 内容回顾
# 池 concurrent.futures
# 进程池 p = ProcessPoolExecutor(n)
# 线程池 p = ThreadPoolExecutor(n)
# future = submit 提交任务
# future.result()获取结果
# map 循环提交任务
# add_done_callback 回调函数
# 协程
# 协程:本质是一个线程
# 能够在一个线程内的多个任务之间来回切换
# 节省io操作的时间也只能是和网络操作相关的
# 特点:数据安全,用户级别,开销小,不能利用多核,能够识别的io操作少
# gevent 第三方模块 完成并发的socket server
# 协程对象.spawn(func,参数)
# 能识别的io操作也是有限的
# 并且要想让gevent能够识别一些导入的模块中的io操作
# from gevent import monkey;monkey.patch_all()
# asyncio 内置模块
# await 写好的asyncio中的阻塞方法
# async 标识一个函数时协程函数,await语法必须用在async函数中
# import asyncio
# async def func():
# print('sjkhaf')
# await asyncio.sleep(1)
# print('sjkhaf')
# loop = asyncio.get_event_loop()
# loop.run_until_complete(func())
# loop.run_until_complete(asyncio.wait([func(),func(),func()]))
# 思维导图 -- 并发
# 进程 :特点 操作模块 基础的方法和特点 IPC
# 线程 : ***** GIL
# 协程 : ***** 在爬虫的时候学到的模块都是基于协程实现的,flask框架/sanic框架
# gevent
# asyncio
# 其他概念 : 同步异步 阻塞非阻塞 并发并行 调度算法 操作系统的发展
# 环境变量
# python -->python.exe
# 在任何目录下都能够找到python.exe文件
# 才能在任意位置输入python命令启动python解释器
# mysqld install 安装mysql服务 mysql服务就被注册到操作系统中
# net start mysql 启动mysql服务
# net stop mysql
# 启动客户端连接server
# mysql -uroot -p123 -h192.168.14.12
# mysql>select user(); 查看当前登录的用户
# mysql>set password = password('123'); 给当前用户设置密码
#
# 创建一个其他用户
# create user 'guest'@'192.168.14.%' identified by '123';
# 给一个用户授权
# grant 权限类型 on ftp.* to 'guest'@'192.168.14.%';
# grant all
# grant select on day37.* to 'guest'@'192.168.14.%';
# grant select,insert
# 操作数据库
# 查看所有数据库 show databases;
# 创建一个数据库 create database 数据库名;
# 切换到这个库下 use 数据库的名字
# 查看这个库下有多少表 show tables;
# 操作表
# 创建一张表
# create table student(name char(12),age int);
# 查看表结构
# desc student;
# 操作数据
# 插入数据 : insert into student values ('wusir',73);
# 查询数据 : select * from student;
# 修改数据 : update student set age=85 where name='alex';
# 删除数据 : delete from student where name = 'alex';