为什么我的日志记录搞砸了(套接字、线程、信号)?

2024-05-18 11:05:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我的python程序的日志输出(使用内置的日志模块,但即使使用简单的打印也会发生)部分混乱,如下图所示。注意第一行,第一个单词仍然是正确的,然后就混淆了:

logging mess

我试着想象发生这种情况的情景:

situation

基本上在我的主线程/程序中,我启动了一个简单的socketserver.TCPServer监听传入的消息。那个服务器在它自己的线程上运行(QtCore.QThread文件)所以我的程序没有被阻止。如果其他应用程序发送消息,TCPServer的请求处理程序将使用QtCore.信号比如:

self.emit(QtCore.SIGNAL('received(const QString)'), receivedMessage)

然后,程序对该消息进行一些解析和计算,并将其记录下来,从而产生上面看到的胡言乱语。在某个时候,日志恢复正常工作。在

我不确定这是否与套接字或线程或两者有关,但我想这可能是一个常见的问题,因此我很感谢任何提示,为什么会发生这种情况。在


Tags: 模块程序服务器消息情况单词线程主线
1条回答
网友
1楼 · 发布于 2024-05-18 11:05:10

我想我已经找到了问题所在:

当外部应用程序想要发送消息时,它总是创建一个新的客户端套接字,连接到服务器,发送消息,然后关闭客户端套接字。在

sock.close()似乎没有立即关闭,docs说我应该先打电话给{},但不幸的是,这也没有帮助。我可以在关闭之后使用一个小的time.sleep(0.5)来修复日志记录问题,但是我做了如下操作:

def ensure_closed(self):
    while True:
        try:
            self.sock.recv(1024)
        except:
            break

def close_connection(self):
    self.sock.close()
    self.ensure_closed()

    # Continue with other stuff.
    # Now the logging behaves normally.

也许有更好的方法。在

相关问题 更多 >