主页

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...

阅读更多

Fastapi教程004

请求体参数 ### 什么是request body ? 当我们想要从浏览器发送数据到API时,我们可以将这个数据作为request body即请求体。 简单说一下什么叫请求体:请求体是客户端发送到API的数据。响应体是API发送给客户机的数据,例如我们在登录一个网站,我们填写的账户密码就是会被封装起来发送到后端服务器进行处理 这个被封装发送到后端服务器的数据我们通常叫它 “请求体”,与请求体相对应的就是“响应体”是由后端服务器返回的数据,我们填写完账户密码后点击登录按钮,会收到类似“登陆成功”的消息,这个就是响应体。 而且当我们发送完请求数据后,后端服务器并不一定会给我们发送一个“响应体”数据。 ### 如何声明 request body 可以通过Pydantic进...

阅读更多

Fastapi教程003

Query参数 简单了解 当我们需要声明其他功能变量,但是不想将其设置为Path路径参数时,通常情况下我们会使用query参数去声明。 query参数通常情况下是在URL中用?来表示的,以key-value的形式出现并且多个k-v之间是用&相连。 举个栗子: from fastapi import FastAPI app = FastAPI() fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}] @app.get("/items/") async def read_item(skip: int = 0, limit: int = 1...

阅读更多