从Tkinker的死机,到mysql中bug的修改

今天在测试聊天室项目时,出现了一个大问题:我的tkinter卡住不动了.

当我点击登录时,它就自动卡死,而且还不报错!

经过一番排查,我发现问题出在Threading上

    def __init__(self):
        """初始化客户端"""
        # 初始化登录窗口
        self.receive_thread = Thread(target=lambda: self.response_handle)  # 问题线程
        self.window = WindowLogin()
        self.window.on_reset_button_cilck(self.clear_inputs)
        self.window.on_login_button_cilck(self.send_login_data)
        # 创建客户端套接字
        self.conn = ClientSocket()

    def startup(self):
        """开启窗口"""
        self.conn.connect_server()
        self.receive_thread.start()# 线程开始
        self.window.mainloop()

不让线程开始,那么代码就没问题,所以问题一定出在线程里

顺着这条路,我找到了线程的target方法调用的函数:

    def response_handle(self):
        """不断地接收服务器的新消息"""
        while True:
            recv_data_1 = self.conn.recv_data()
            print(recv_data_1)

其中recv_data()为

def recv_data(self):
    """接收数据,并自动转换为字符串返回"""
    return self.recv(512).decode('utf-8')

这更奇怪了,完全看不出来有什么错误.

一通logging,发现在按下登录时服务器只收到了登录信息,却没有发送信息,

回到服务器看了一下发现:服务器却报了一个pymysql.err.OperationalError.

于是定位到mysql上,去网上查了一下错误发现这种错误意味着mysql超时后自动关闭了,其中还提到了mysql中叫做wait_timeout的参数,查了一下发现才120!!!!,最后在my.ini中更改wait_timeout->36000,重启sql server和chat_server发现点登录时再也不会报错了!

查了一个晚上,弄得我够呛了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值