背景
在生产环境中,我们使用了 pymysql 和 DBUtils.PooledDB 来管理 MySQL 数据库连接池。由于业务量激增,新增了多个业务实例,最终导致 MySQL 集群以及本地实例的连接数被打满,无法建立新的请求连接。经过排查,发现根本原因是 pymysql 默认开启事务,所有的 SQL 操作(包括查询)都会自动开启事务,并且不会自动提交,导致事务长时间占用连接,无法释放。
python debug配置
python以模块的方式进行debug
正常python文件进行debug时,可以直接运行,但是遇到一个python的框架项目,直接运行或者debug都会报错server包不存在(server是一个文件夹,下面并没有init文件,但存在多个业务文件,以及程序入口文件)
接口的理解
在 Go 语言中,只要一个类型实现了某个接口,那么它就可以作为该接口的实例被使用
gopackage main
import "fmt"
// 定义一个接口 Speaker
type Speaker interface {
Speak()
}
// 定义一个结构体 Dog
type Dog struct{}
// 让 Dog 实现 Speak 方法
func (d Dog) Speak() {
fmt.Println("汪汪汪!")
}
// 定义一个结构体 Cat
type Cat struct{}
// 让 Cat 实现 Speak 方法
func (c Cat) Speak() {
fmt.Println("喵喵喵!")
}
// 定义一个通用的说话函数
func MakeSpeak(s Speaker) {
s.Speak() // 只要是实现了 Speaker 接口的类型都能调用
}
func main() {
dog := Dog{}
cat := Cat{}
// Dog 和 Cat 都实现了 Speaker 接口,因此可以作为 Speaker 传入
MakeSpeak(dog)
MakeSpeak(cat)
}
相关信息
json.dumps进行字符串转json转换以及序列化的时候,一定要增加ensure_ascii=False参数,否则的话,默认会转化为ascii字符