首页 > 解决方案 > 从函数返回 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)

在写这篇文章时,我想出了一个将缓冲区传递给函数并向其写入数据的想法,但我认为这仍然是一个好问题。

标签: python-3.xmemoryview

解决方案


推荐阅读