Python udp 性能

标签 python performance sockets

我在带有 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/

相关文章:

python - 整数非零

python - 识别无人机图像中的汽车

multithreading - 达到特定核心数后出现严重的多线程内存瓶颈

java - 网络不好时的socket : Should I check connection state first or just send with retry mechanism?

java - 从服务器向所有连接的客户端显示在线用户

python - 正则表达式消除 bibtex 文件中的字段

java - 如何找到java非阻塞方法的执行时间

python - 使用 Python 高效删除 CSV 中的重复项

java - 在有限的时间内运行一段代码

python - 在 Python cv2 中的两个时间戳之间保存较长视频中的视频剪辑