人确实是自私的动物,但为了极少数的人,人是能牺牲自己的。这种莫名其妙的感情就是爱,是人存在的证据。

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()

给这个函数开一个线程让他挂着跑。