[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