Безопасно ли возвращать обзор памяти из функции? - PullRequest
0 голосов
/ 04 мая 2020

Я пишу программу, которая использует TCP IP для отправки / получения данных. Чтобы ускорить синтаксический анализ и анализ данных, я в настоящее время использую всюду представление о памяти исходного пакета и похоже, что он работает. Но безопасно ли это? Могут ли байты, указанные в изменении вида памяти, быть удалены сборщиком мусора?

Я пытался найти ответ в Google, Duckduck go, 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)

При написании этого поста у меня возникла идея передать buffer в функцию и записать в нее данные, но я думаю, это все еще хороший вопрос.

...