首页 > 解决方案 > python非阻塞套接字避免在发送中复制

问题描述

我有一些看起来像这样的代码:

                if mask & selectors.EVENT_WRITE:
                    if data.connid == receive_target and not wrote:
                        data.outb = bytearray(1024 * 1024 * 64)
                        wrote = True
                    if data.outb:
                        #print("sending", repr(data.outb), "to connection", data.connid)
                        sent = sock.send(data.outb)  # Should be ready to write
                        print(sent)
                        data.outb = data.outb[sent:]

这在具有非阻塞套接字的选择器事件循环中执行。问题在于,这种发送数据的方式需要大量复制(data.outb = data.outb[sent:]),这决定了实际的网络延迟。我想知道 python 中是否有某种字节的循环缓冲区,我可以在其中执行 data.outb = data.outb[sent:] 之类的操作而无需任何复制。

标签: pythonpython-socketspython-bytearray

解决方案


推荐阅读