主页

Python多线程同步问题

关于Python多线程同步问题 场景描述 场景描述:我们设有两个并发的线程( 线程A 和 线程B ),需要 资源1 和 资源2 .假设 线程A 需要 资源1 , 线程B 需要 资源2 .在这种情况下,两个线程都使用各自的锁,目前为止没有冲突。现在假设,在双方释放锁之前, 线程A 需要 资源2 的锁, 线程B 需要 资源1 的锁,没有资源线程不会继续执行。鉴于目前两个资源的锁都是被占用的,而且在对方的锁释放之前都处于等待且不释放锁的状态。这是死锁的典型情况。所以如上所说,使用锁来解决同步问题是一个可行却存在潜在问题的方案。 使用默认Lock进行同步 特点: 通过 threading.Lock 我们可以将共享资源某一时...

阅读更多

Python的一些内置高效迭代器

关于itertools中一些常见的迭代器函数 1. repeat函数 重复无限次或n次 list(repeat(10,3)) -> [10,10,10] 2. cycle函数 无限循环 cy = cycle("ABCD") next(cy) --> A next(cy) --> B next(cy) --> C next(cy) --> D next(cy) --> A ... 3. count函数 count() start, [step] start, start+step, start+2*step, ... 对数据按步长进行倍数累加 ac = count(10) next(ac) --> 10, 11, 12 .....

阅读更多

python爬虫分享

爬虫 1. 分类 1. 通用爬虫 - Baidu Google Yahoo 2. 聚焦爬虫 - 面向特定主题 2. 爬虫流程模块 1. 网络请求模块 - urllib requests aiohttp 2. 爬虫控制模块 - url队列 3. 信息提取模块 - bs4 xpath 正则 3. 技术分类 构造http:自由度高、根据需求变化 requests asyncio-aiohttp 使用框架: 按照特定的模式进行爬取 scrapy pysider 使用selenium: 基于浏览器模拟用户行为 Scrapy架构 Scrapy Engine:引擎,负责其他组件通信,事件调度触发 Spiders:负责处理Resp...

阅读更多

Mysql读书笔记

行锁 MySQL的行锁由各自的引擎自己实现 两阶段锁协议: 在InnoDB中行锁是需要才加上的,并且需要等到事务commit后才会释放 事务需要锁住多个行,可以把最有可能造成锁冲突的语句放在后面(还是有可能产生死锁) 死锁解决策略: 直接进入等待,设置等待超时时间 innodb_lock_wait_timeout来设置 默认50s 发起死锁检测,如果出现死锁,回滚数据 参数innodb_deadlock_detect设置是否开启死锁检测 减少死锁: 如果出现热点行更新出来的性能问题: 确保不会发生死锁 -》 关掉死锁检测 控制并发度

阅读更多

MySQL读书笔记

MySQL分层架构 Server层:涵盖MySQL大多数的核心功能,以及内置函数如存储过程、触发器、视图等 存储引擎:负责数据的存储和提取 从一条查询语句分析: 其中Server层可划分为: 连接器: 负责跟客户端建立连接、获取权限、维持和管理连接 mysql -h ip -P port -u name -p password show processlist; 查看链接 默认八小时的连接时间 wait_timeout控制 长链接:连接成功后,客户端持续有请求,使用同一连接。 短链接:每次执行完很少的几次操作就断开。 推荐使用长连接 —— MySQL占用内存大 ...

阅读更多

Mysql双机热备

MySQL双机热备 1. 准备两台服务器(虚拟机也可以) A: 1.1.1.1 B: 2.2.2.2 两台服务器均安装同一版本的MySQL数据库,其中将A作为master, B服务器作为slave。 两台服务器中准备好相同的数据(可利用mysqldump进行数据的迁移) 2. 配置master服务器(1.1.1.1) 登陆MySQL数据库 mysql -u xxx -p xxx 建立主从数据库同步账户 mysql> grant replication slave on *.* to 'broot'@'2.2.2.2' identified by 'broot'; mysql> flush privileges; 当创建好用户后,可在B服务器上进行测试 m...

阅读更多