No tengo muy claro que quieres hacer con el ejemplo ese.
Puedes trabajar con sockets en modo no blocante.
Para ello tienes por ejemplo select.poll, pero es de muy bajo nivel.
yo tengo una librería que es pykiss.poll que es lo mismo pero de mayor nivel, te permite asignar callbacks a los eventos de I/O.
Si en vez de threads te animas a probar los procesos, tengo una librería llamada pykiss.fork que permite la comunicación entre procesos mediante eventos/callbacks, de una manera muy sencilla.
Esto sería equivalente a tu ejemplo
Código:
from pykiss import fork
class Vehiculo_Process(fork.Process):
def main(self):
printf("Ejecutando")
self.instance_events['parametros'] = self.parametros
fork.Process.main(self)
def transmitir(self):
self.send_event(keyword = 'aceleracion', aceleracion = self.aceleracion)
def parametros(self, evento):
self.direccion = evento['direccion']
self.velocidad = evento['velocidad']
self.aceleracion = evento['aceleracion']
print ("El vehiculo tiene una velocidad de %s, y una aceleracion de %s, siguiendo la direccion %s"%(self.velocidad, self.aceleracion, self.direccion))
class Vehiculo_Driver(fork.Driver):
def parametros(self, direccion, velocidad, aceleracion):
self.send_event(keyword = 'parametros', direccion=direccion, velocidad=velocidad, aceleracion=aceleracion)
def reenviar(event, driver):
for d in control.drivers:
if d==driver:
continue
d.send_event(**event)
control = fork.Control()
control.events['aceleracion'] = reenviar
vehiculo1 = control.fork(Vehiculo_Driver, Vehiculo_Process)
vehiculo1.parametros("norte",20,0)
vehiculo2 = control.fork(Vehiculo_Driver, Vehiculo_Process)
vehiculo2.parametros("norte",30,0)
vehiculo3 = control.fork(Vehiculo_Driver, Vehiculo_Process)
vehiculo3.parametros("sur",60,0)
Pero no veo que haya nadie escuchando por la aceleración que envías, ni nada.
Si pones un ejemplo funcional te lo "convierto" a procesos concurrentes con pykiss