使用日志模块get stu发送日志

2024-04-26 10:42:42 发布

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

我有两个http服务器,它们使用日志模块相互通信。在

serverA = SocketServer.TCPServer(("", 8888), myHandler)
serverB = SocketServer.TCPServer(("", 7777), myHandler)

第一个服务器A向服务器B发送GET请求:

^{pr2}$

然后,serverB用POST消息回答:

class myHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        logger = logging.getLogger('mach')
        logger.setLevel(logging.DEBUG)
        logger.addHandler(HTTPHandler("localhost:8888", "/",method='POST'))
        print "1111"
        logger.critical('POST from 7777')
        print "2222"
        return

在调试它时,我看到“1111”被打印出来了,但是“2222”没有被打印出来,在serverA的do\u POST方法中,第一行打印命令没有被打印出来。 然而,当我用wireshark检查它时,我看到一个tcp数据包发送到8888端口,它是my POST msg。。在

那么,会发生什么情况,我看不到它在服务器?在


Tags: 模块服务器httpgetloggingloggerpostdo
1条回答
网友
1楼 · 发布于 2024-04-26 10:42:42

两台服务器之间出现死锁。场景如下:

  • 服务器A向服务器B发送GET请求,阻止等待响应,即在收到响应(或发生错误)之前,以下内容不会返回:

    logger.warning('log from serverA')
    
  • 服务器B在do_GET()中从服务器A接收GET请求,但它不发送回复。相反,它将POST请求发送回服务器a,然后服务器B阻塞等待来自服务器a的响应:

    logger.critical('POST from 7777')
    
  • 两台服务器都是单线程的,并且都被阻塞,等待对方的响应,因此会出现死锁。

相关问题 更多 >