[Python] Grossi Array via socket

Manlio Perillo manlio.perillo a gmail.com
Gio 27 Nov 2014 15:06:36 CET


2014-11-26 21:27 GMT+01:00 Marco Ippolito <ippolito.marco a gmail.com>:

> 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.
>
>
Non sono sicuro di capire la differenza tra caricare una sola volta e ognni
2 minuti e mezzo.


> Nel libro "Python CookBook 3rd Edition" a pagina 481, c'è il
> paragrafo: "Sending and Receiving Large Arrays":
>
>
Quando invii dei dati tramite socket, il kernel effettua una copia del
buffer che passi dal tuo programma.
Quando converti un array di numpy in un buffer, numpy effettua una copia
allocando memoria per contenere i dati.

La soluzione adottata da Python è memoryview, che crea una referenza alla
memoria come faresti in C.
> [...]

> 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?
>
>
L'unica che mi viene in mente è scrivere un modulo in C che crei una
memoryview di un array.


> 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
>

Non sono stringhe, ma bytes (che in Python 2.x sono rappresentati dal tipo
str).

Ciao  Manlio
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20141127/3276756d/attachment.html>


Maggiori informazioni sulla lista Python