python - 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:] 之类的操作而无需任何复制。
解决方案
推荐阅读
- typescript - 传递索引类型时,Typescript 的多余属性检查失败
- debugging - Step in, Step out 和 Step Over 有什么区别?
- eclipse - 迁移到 Eclipse photon 时,Eclipse RCP 最大化编辑器不显示
- android - 如何修复 EBUSY:Ionic 3 中的资源繁忙或锁定?
- javascript - 如何在 javascript 中使用 fetch api 从 C# Web 方法获取响应?
- javascript - js - querySelector 在伪类 ::before 中选择和编辑样式
- html - 在 org.apache.pdfbox.pdmodel.graphics.color.PDPattern.toRGB 获取 java.lang.UnsupportedOperationException
- python - 列表字典的键到行枚举、制表符分隔的 csv 文件
- jmeter - 如何计算 JMeter Webdriver 采样器中两个不同操作的时间
- ruby-on-rails - 为什么 gem 在用户登录后设计重定向到注册路径?