Получить большой список через TCP Sockets - Python

python list sockets tcp

86 просмотра

1 ответ

15 Репутация автора

Как лучше всего получать большой список через TCP-сокеты?

Мой код выглядит так. Когда вам нужно получить большой список, это не сработает, очевидно.

    print 'connection from', client_address
    while True:
        try:
            data = pickle.loads(connection.recv(8192))
        except EOFError:
            print 'no more data from', client_address
            break  
Автор: Moras Источник Размещён: 18.07.2016 08:39

Ответы (1)


0 плюса

9581 Репутация автора

Решение

Лучший способ сделать это - превратить объект socketв fileобъект. Вы можете сделать это с connection.makefile(). Затем, вместо вызова pickle.loads()- который ожидает полную строки байт , содержащую весь консервированный объект - вызов pickle.load(connection.makefile()). Таким образом, вы позволяете pickleмодулю обрабатывать чтение всего «файла». Он будет readнеоднократно вызывать функцию объекта, пока не получит все ожидаемые данные.

Это в основном предполагает, что вся оставшаяся часть потока должна быть выделена (что, по-видимому, является тем, что вы пытаетесь сделать, поэтому звучит так, как будто оно должно работать). В противном случае вам может понадобиться обернуть свой собственный псевдо-файл-объект вокруг потока, который имеет некоторые независимые сведения о конце засоленного объекта.

Автор: Gil Hamilton Размещён: 18.07.2016 09:16
Вопросы из категории :
32x32