我在带有 wifi 的 Raspberry PI 2 上的不同端口上使用 TCP 和 UDP 设置了一个非常简单的消息服务器。我正在使用 UDP 进行多播。服务器工作正常。问题是当我运行服务器(TCP 和 UDP 监听器)时,处理器使用率会跳到大约 30%。这没有处理任何东西,只是在听。当我关闭 UDP 时,它会下降到大约 3-5%。这是正常的(它是 RPi),还是我做错了什么?下面是初始化 UDP 监听器的代码:
class UDPServer(asyncore.dispatcher):
def __init__(self):
asyncore.dispatcher.__init__(self)
multicast_group = '224.3.29.71'
server_address = ('', 8081)
# Create the socket
self.create_socket(socket.AF_INET, socket.SOCK_DGRAM)
# Bind to the server address
self.bind(server_address)
group = socket.inet_aton(multicast_group)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
self.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
print("UDP listening on {}:{}".format(multicast_group,8081))
最佳答案
我花了一段时间才回到这个问题上,但 J.F. Sebastian 有解决方案。我实现了 asyncio
并且它的工作开销非常小。我直接从 Python 复制了演示 documentation . asyncio 的唯一问题是它似乎被列为临时的,因此从技术上讲它可以在以后删除。如果你想要一个答案的功劳,请将你的评论移到一个答案上,我会标记它。感谢 J. F. Sebastion 和 dsgdfg。
关于Python udp 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38162706/