人确实是自私的动物,但为了极少数的人,人是能牺牲自己的。这种莫名其妙的感情就是爱,是人存在的证据。
Linux下sqlite单线程
在Linux下sqlite3使用orm操作数据经常会出现线程锁死无法写入,即使给了sqlite3权限还是会这样,如果想在Linux下使用sqlite,需要加入线程锁,所以决定改用MySQL。
无法迁移MySQL
初始化链接的时候会报错
Specified key was too long; max key length is 767 bytes
django 2.1.1 不兼容 MySQL5.5,使用MySQL5.7或者MySQL8.0即可,phpstudy自带MySQL8.0
高并发连接MySQL配置
高并发情况下,可以适当加大MySQL的连接数
修改my.ini
[mysql]
default-character-set=utf8
[mysqld]
port=3306
character-set-server=utf8
default-storage-engine=InnoDB
max_connections=512
max_connect_errors=10
max_allowed_packet = 500M
经常链接失败
orm大量的链接操作数据库,会无法链接到数据库,每次在使用orm操作数据的时候,可以先执行关闭不可用的MySQL链接
def close_old_connections():
for conn in connections.all():
conn.close_if_unusable_or_obsolete()
或则维持发送心跳包
def Heartbeat():
while 1:
try:
heartcheck = list(URL.objects.all())
# 这里如果获取数据失败触发心跳检测
if heartcheck == []:
time.sleep(60)
else:
time.sleep(2)
# 维持 2 S 发送一次心跳包检测连接,如果失败则清洗连接
except:
print('[+ HeartBeat] 维持心跳包失败,清洗失败链接')
close_old_connections()
给这个函数开一个线程让他挂着跑。