[Python] problema con socket (lettura blocking)

Manlio Perillo manlio.perillo a gmail.com
Ven 4 Ott 2013 17:57:53 CEST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 04/10/2013 17:46, Vittorio Spina wrote:
> Il 04/10/2013 17:40, Manlio Perillo ha scritto: On 04/10/2013 
> 17:33, Vittorio Spina wrote:
>>>> Ciao a tutti. Ho scritto un programma che riceve dati da un 
>>>> Laser con interfaccia Ethernet.
>>>> 
> Quale e' il protocollo usato dallo strumento?
>> in che senso il protocollo?

Nel senso in che modo sono scambiati i dati tra i due punti della
connessione, ed il formato di questi dati.

> E' una connessione TCP-IP... intendi come
>> sono fatti i dati? in quel caso è un po complesso, diciamo che 
>> lui spara di continuo un header dove è scritto quanti punti ha 
>> scnsionato e poi la lista dei punti...
> 

Ok, allora non capisco quale è il tuo problema.

>>>> il programma riassumento ha la seguente forma:
>>>> 
>>>> from socket import * import config s = 
>>>> socket(AF_INET,SOCK_STREAM) s.connect((config.IP, 
>>>> config.PORT)) while 1: if s.recv(1)=="\xAA": letturaNumero = 
>>>> s.recv(1)
>>>> 
>>>> quando lancio il codice noto che letturaNumero identifica un
>>>>  numero progressivo.
> Noti? Non e' specificato nel protocollo?
>> si ovviamente è specificato, diciamo che avvio il programma e 
>> sono alla scansione tipo 5500 e di lì inizio 5501, 2, ... chiudo 
>> un attimo e riavvio il codice e sono a 7324, 7325... insomma 
>> rimane appeso, mi aspetta.
> 

> [...]

>>>> E' come insomma se il device stesse ad aspettarmi fino alla 
>>>> lettura successiva, cosa che io non voglio poich│ i dati
>>>> sono tanti e poi mi ritrovo con una sorta di macchina del 
>>>> passato.
>>>> 
> Cosa vuoi fare, allora?
>> voglio i dati in tempo reale. Se apro e chiudo il socket scatta 
>> un po' ma funziona, altrimenti vedo con un ritardo di circa 5 
>> secondi, che non va bene.
> 

Ok, finalmente ho capito cosa intendi.

Il problema e' che sei troppo lento a leggere, e non ci puoi fare
niente a parte ottimizzare il programma o riscriverlo in C.

Infatti lo strumento non sembra avere supporto per il controllo del
flusso [1] e quindi ti continua a mandare dati, anche se tu non sei in
grado di "tenere il passo".


[1] http://en.wikipedia.org/wiki/Flow_control_(data)


Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Icedove - http://www.enigmail.net/

iEYEARECAAYFAlJO5YEACgkQscQJ24LbaUR0XACdEU8o4eM5NeoptWYoH3sA0t//
sPQAnRT42sZ3OU89L7YfxQEr6l+VU4E8
=fwE0
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python