为什么我的 python 代码使我的服务器停滞不前?

Why is my python code bogging down my server?

我是 python 的新手,正在尝试编写自己的系统日志程序。我已经在我自己的机器上测试过了,它工作正常,我没有注意到任何东西。现在,当我将它放在我的 Ubuntu VM 上时,它会使 CPU(由 'top' 和 vSphere 报告)达到 80-99%。我从我的 i5 (3.1 GHz) 处理器中分配了 1 CPU 个内核。如果有的话,也许是文件打开和关闭导致了这个峰值,但这对我来说并不合适。在此先感谢您的帮助!

import socket
    log= input("Enter full path of file you would like to monitor:\n")
    host =input("Enter IP address for remote syslog server:\n")
    port =input("Enter syslog service port to send syslogs to:\n")
    port=int(port)
    with open(log,'r') as file:
        current_pos = 0
        data=file.read().splitlines()
        old_len=0
        file.close()

        while True:
            new_len=len(data)
            udp_port = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

            with open(log,'r') as file:
                data=file.read().splitlines()

                while new_len > old_len and current_pos < new_len:
                    msg=data[current_pos]
                    print('Sending....',msg,'=====>',host,':',port)
                    udp_port.sendto(bytes(msg, "utf-8"), (host, port))
                    current_pos+=1

                file.close()#Is this necessary here? 
                old_len=new_len

            #udp_port.shutdown()#stay open only during transmission
            udp_port.close()

您的代码有一个 while True: 块。这意味着它将一遍又一遍地循环,不断地从你的文件中读取。 CPU 获得的唯一中断是阻塞调用(例如网络和其他 I/O),您的线程将在 I/O 资源可用之前产生 CPU 时间。

为避免扰乱 CPU,您应该在 while 循环的末尾插入一个 sleep() 调用。即使是 10 毫秒的休眠也应该给你低延迟,但在 CPU.

上放松一下