python-3.x - 从函数返回 memoryview 是否安全?
问题描述
我正在编写使用 TCP IP 发送/接收数据的程序。为了加快解析和分析数据,我目前正在到处使用原始数据包的 memoryview,看起来它正在工作。但它安全吗?memoryview 指向的字节可以更改或被垃圾收集器删除吗?
我试图在谷歌、Duckduckgo、Python 文档、堆栈溢出中找到答案,但他们都没有。
示例代码:
from socket import socket
def _receive(conn: socket) -> (int, bytes):
"""
Read whole packet from connection.
:returns length of packet, read bytes
:rtype int, bytes
"""
packet_length = self.__read_packet_length()
fragments = []
read_bytes = 0
while read_bytes < packet_length:
packet = conn.recv(packet_length - read_bytes)
if not packet:
return None
fragments.append(packet)
read_bytes += len(packet)
return packet_length, b''.join(fragments)
def recv(conn: socket) -> memoryview:
packet_len, data = _receive
# do_stuff
return memoryview(data)
在写这篇文章时,我想出了一个将缓冲区传递给函数并向其写入数据的想法,但我认为这仍然是一个好问题。
解决方案
推荐阅读
- flutter - 颤振类型'RxList
' 不是 'RxList 类型的子类型 >' - sql-server - 如何将带有消息的横幅添加到报表服务器 Web 门户?
- r - 如何更改(循环中的)块内的块选项(结果格式)?
- python - 从python中的SVG文件中提取路径数据到XY点
- python - 如何使用 Selenium 下载文件?
- r - 使用 rvest 将函数映射到抓取的链接列表时遇到问题
- android - 使用毕加索的 ImageView 中未显示大图像
- docker - 适用于 Windows 10 家庭版的 Docker
- reactjs - React ref 不会在异步集上更新
- java - ServerSocket 是真正的套接字吗?如果是,它的源 ip 和源端口是什么?