[Python] Grossi Array via socket

Marco Ippolito ippolito.marco a gmail.com
Mer 26 Nov 2014 21:27:30 CET


Ciao a tutti,

ho pensato di usare il meccanismo del tcp-server - client per caricare
una sola volta dei modelli piuttosto pesanti, per poi eseguire alcune
operazioni di estrazione ed elaborazione.
Se non si facesse cosė infatti, dovrei caricare questi modelli (2
minuti e mezzo) ogni volta che uso le funzioni di estrazione ed
elaborazione.

Nel libro "Python CookBook 3rd Edition" a pagina 481, c'č il
paragrafo: "Sending and Receiving Large Arrays":

"You want to send and receive large arrays of contiguous data across a
network connection, making as few copies of the data as possible."

la soluzione proposta prevede questo "trucco": view =
memoryview(arr).cast('B') che assegna l'array in una "memoryview" di
unsigned bytes.

Ho provato a testare, per capirle ed adattarle a quello che serve a
me, le funzioni proposte che usano il casting di memoryview. Ma mi
dice:

File "zerocopy.py", line 4, in send_from view =
memoryview(arr).cast('B') AttributeError: 'memoryview' object has no
attribute 'cast'

e sembrerebbe che in python 2.X non ci sia l'attribute 'cast' per il
memoryview: https://docs.python.org/2/library/stdtypes.html#typememoryview

Avete qualche idea su come possa ovviare a questo inconveniente?

Vi ringrazio per tutti gli hints.
Marco

PS:
ho provato ad usare il built-in socket:
https://docs.python.org/2/library/socket.html?highlight=socket#module-socket
ma ho visto che i dati sono inviati e ricevuti in formato string,
formato che č molto difficile ri-trasformare in array numpy


Maggiori informazioni sulla lista Python