问题清单
pymysql 连接池
你知道的,为了我自己的那点需求,我已经解决了一个MySQL报错。现在来解决另外一个问题。
- Pymysql 连接池操作 - 人家写的挺好
- [227]python数据库连接池DBUtils.PooledDB - 写的更好
- DBUtils User's Guide - 官方文档
- Python 使用 PyMysql、DBUtils 创建连接池,提升性能 - 只是搜索结果指向它的比较多,但写的一般
上面文章的内容都不难。直接无脑照抄代码……(2小时后)改完了。整个系统都改完了,能启动。部署到线上了。
然后来玩个测试。
~$ su -
~# systemctl stop mysql.service
~# systemctl stop supervisor.service
~# systemctl start mysql.service
// 在数据库中执行查询
show status like 'Threads%';
// 可以看到当前只有1个连接
// 在窗口1执行
~# python3 /usr/local/bin/les/test_a.py
// 在数据库中执行查询
show status like 'Threads%';
// 当前有4个连接,连接新增的数量与mincached字段设置的一致(Threads_connected=4,Threads_created=4)
// 在窗口2执行
~# python3 /usr/local/bin/les/test_b.py
// 在数据库中执行查询
show status like 'Threads%';
// 当前有7个连接(Threads_connected=7,Threads_created=7)
// 在窗口2中^C打断程序的执行
// 在数据库中执行查询
show status like 'Threads%';
// 当前有4个连接(Threads_connected=4,Threads_created=7,Threads_cached=3)
// 在窗口1中^C打断程序的执行
// 在数据库中执行查询
show status like 'Threads%';
// 当前有1个连接(Threads_connected=1,Threads_created=7,Threads_cached=6)
~# systemctl start supervisor.service
^D
好的。我已经得到我想要的数据了。拜~
tornado 高并发
2021.9.4 更新
现在是中午时间,没事做。就看看资料呗。Tornado实现多线程、多进程HTTP服务 一篇足以讲清整个问题(讲不清)。
2021.10.1 更新
- 多线程,多进程,协程 基础了解
- 基础知识:线程,进程。多进程,多线程。并发,并行的区别
- python协程系列(四)——同步/异步、并发/并行、线程/进程 - 讲的很基础,比较容易说明问题。这个博主相关的python协程系列都可以读一读。
- Linux IO模式及 select、poll、epoll详解
- 如果这篇文章说不清epoll的本质,那就过来掐死我吧! (1) - 我想说的其实是这个系列,这里只放个(1)
- tornado 异步高并发 - 这是之后所有搜索关键字的种子
- Python3中tornado高并发框架 - 这是一篇大而全的文章,甚至还提到了WebSocket…但是,这篇文章中有2个图是不错的,而且例子也简单,适合入门
- tornado IO并发真的很高么? - 没啥用,但是不影响了解下
- Tornado异步原理详析 - 简单的说,就是如果你超有钱,可以做到无限的系统资源,那么其他多线程的服务器会更爽……同时提供了一个建议的服务器监听代码
上面看了这么多,应该已经大概有些感性的认识了。下面自己去做两个demo体会下,然后继续这个话题。
高并发的话题现在莫名其妙的就跑到异步了……
2021.10.2 更新
- 《Python 3 程序开发指南(第二版)》,第8章、第10章。 - 是的,这次直接看的是书。这两章会让新手看的迷糊,但是不要紧。
- python中和生成器协程相关的yield之最详最强解释,一看就懂(一)
- Python协程、yield、yield from - 读的多了,可能会更容易理解些
- 再议Python协程——从yield到asyncio - 直到这一篇,使用多进程、多线程、协程的所有缺点都列完了。剩下的就看自己的选择了
2021.10.3 更新
……我做出了自己的选择:放弃 Tornado,转向 Flask。因为这样的服务完全用不上 tornado 的特性。还不如选择一个更大众的方式来进行这样的操作。换了 Flask 后,该是同步的还是同步的操作。剩下的问题,就交给部署运维吧。
- flask是如何处理多个访问请求的?
- 知乎是怎么运行 tornado web 服务的 - 你会发现大厂也没有使用 tornado 的特性。
大家写异步都废脑子。 - python之web server搭建:Gunicorn、flask及tornado
- Flask 高并发部署方案详细教程!
- Flask 阻塞的问题
- [750]flask之异步非堵塞实现 - 无用的额外了解扩充
- flask+Gunicorn(gevent)高并发的解决方法探究 - 想看了看看
- Flask/MySQL app seems to be blocking concurrent requests when query is complicated - 如果还想用 tornado 的话,换到 MongoDB 再用异步库也是可以的……
- 简单的python 微服务小框架 - 又或者自己实现一个服务框架……
- 关于flask后端处理数据库是否需要使用到进程池
- 万能通用对象池,可以池化任意自定义类型的对象。 - 我没看……
- python笔记(flask DButils 数据库锁,请求上下文管理(LocalProxy,app,g)) - 也没看,只是放在这儿……
没有想到,事情最后的解决办法竟然是这样的……
现在有另外一个问题需要验证:
连接池会有多个数据库连接。现在假如说 Flask 通过 Gunicorn 多进程部署了,那是不是说,数据库连接的数量就要翻倍了?
2021.10.4 更新
再扯些别的。