def threadSocket(Socket, port):
'''
Thread encargado de sotener comunicacion entre Socket cliente y
el puerto serial asignado
Mientras se mantenga activo el thread de recepcion se intentara leer del
puerto serial y enviarlo al socket cliente
Se asume que socket y port son objetos vaidos validos
'''
#Intenta abrir el puerto serial
try:
COM = serial.Serial(port-1)
except:
#Si esta en uso no se encuentra disponible, muestra error
print 'Error: Puerto COM'+str(port)+' no disponible'
else:
#Al conectarse se crea el thread de recepcion
print 'Conectado a puerto COM'+str(port)
rxThread = threading.Thread(target=rxThreadDef,args=(Socket,COM))
rxThread.start()
dato = ''
#Mientras el thread este activo
while rxThread.isAlive():
try:
#Lee del puerto serial y envia a Socket cliente
dato += COM.read()
if parserCOMToSocket(dato):
Socket.send(dato)
dato=''
except:
break
print "Puerto cerrado!"
#Cierra puerto Serial
COM.close()
#Cierra Socket
Socket.close()
#print "Hilo terminado"
def rxThreadDef(Socket,COM):
'''
Thread (Hilo) encargado de recibir la informacion del Cliente
y enviarla por medio del puerto serial
Si se genera algun error se rompe el ciclo y termina el thread
'''
dato = ''
while 1:
try:
d = Socket.recv(1024)
except:
break
if d:
dato += d
if parserSocketToCOM(dato):
COM.write(dato)
print dato
dato = ''
else:
break
def parserSocketToCOM(dato):
return True
def parserCOMToSocket(dato):
return True
안녕을 사용하여, 나는 시리얼 포트와 rxThread이이는 죽을 때 파이썬 2.7에읽기 및 쓰기 소켓-하여 SerialPort 비싼 CPU를
를 소켓을 사용하여 AIR 응용 프로그램 사이에 다리를 구현하려고 socketThread은 클라이언트 소켓이 죽어서 소켓과 직렬 포트를 닫을 수 있습니다. 그러나 스크립트는 직렬 포트에서 읽기를 기다렸다가 모두 닫아야합니다.
timeout=0
으로 시도하면 CPU 사용량이 100 % 증가합니다. timeout=None
으로 시도했지만 COM.isWaiting()
을 사용하면 동일한 문제 (100 % CPU)가 발생합니다.
소켓이 다른 방법으로 닫혀 있는지 어떻게 알 수 있습니까?
두 가지 출처에서 읽으 려한다고 생각하면 잘 압니까? – jary