首页 |  我的博客 |  查看该博主内容分类 | 

django.db.utils.InternalError: Packet sequence number wrong - got 1 expected django使用异步报错解决方案

1. 使用连接池

pip install django-db-connection-pool

DATABASES = {
	'default': {
		# 'ENGINE': 'django.db.backends.mysql',
		'ENGINE': 'dj_db_conn_pool.backends.mysql',
		...
		'POOL_OPTIONS': {
			'POOL_SIZE': 10,
			'MAX_OVERFLOW': 10,
			'RECYCLE': 24 * 60 * 60
		}
	}
}

POOL_SIZE(连接池容量)、MAX_OVERFLOW(连接池容量向上浮动最大值) 这两个参数包含在 POOL_OPTIONS 内。
例如下面的配置,default 的连接池常规容量为10个连接,最大浮动10个, 即为:在 default 连接池创建后,随着程序对连接池的请求,连接池内连接将逐步增加到10个,如果在连接池内连接 全部用光后,程序又请求了第11个连接,此时的连接池容量将短暂超过 POOL_SIZE,但最大不超过 POOL_SIZE + MAX_OVERFLOW。
如果程序请求 default 数据库的连接数量超过 POOL_SIZE + MAX_OVERFLOW,那么连接池将一直等待直到程序释放连接。
所以,注意线程池对数据库连接池的使用,如果线程池大于连接池,且线程无主动释放连接的动作,可能会造成其他线程一直阻塞。

RECYCLE:连接超时时间,如果设置为 -1 以外的值,则表示连接回收之间的秒数,这意味着在结帐时,如果超过此超时,则连接将关闭并替换为新打开的连接。默认为 -1。

经实践,django中配合该配置食用最佳:https://www.cnblogs.com/aiyablog/p/16698143.html

posted @ 2022-09-17 15:17  Z哎呀  阅读(925)  评论(0)    收藏  举报