Tengo un programa python con 2 hilos (llamémosles 'fuente' y 'destino'). El hilo de origen a veces publica un mensaje al hilo de destino con algunos argumentos. Después de que el hilo de destino selecciona un mensaje, debe llamar a una función correspondiente con los argumentos guardados en el mensaje.cómo poner una función y argumentos en la cola de python?
Esta tarea se puede resolver de varias maneras. El más fácil es poner un gran 'if ... if..if' en el ciclo de selección de mensajes del hilo de destino y llamar a la función según el tipo de mensaje recibido y los argumentos guardados. Pero este dará como resultado una enorme cantidad de código (o una gran tabla de búsqueda) y al agregar nuevos la función de manejo de mensajes/controlador evolucionará paso adicional para escribir código en el ciclo de selección de mensaje .
Dado que las funciones trata Python como objetos de primera clase y tienen tuplas, quiero poner una función y argumens dentro de un mensaje, por lo que el hilo de destino recoge un mensaje que acaba de llamar a un functon guardado dentro de un mensaje sin ningún conocimiento qué función es.
puedo escribir un código para una función con el número especificado de argumentos:
from Queue import *
from thread import *
from time import *
q = Queue()
def HandleMsg(arg1, arg2) :
print arg1, arg2
def HandleAnotherMsg(arg1, arg2, arg3) :
print arg1, arg2, arg3
def DestinationThread(a) :
while True :
(f, a, b) = q.get()
f(a, b)
start_new_thread(DestinationThread, (0,))
print "start"
sleep(1)
q.put((HandleMsg, 1, 2))
sleep(1)
print "stop"
La pregunta es: cómo modificar un código para que pueda poner() una función con cualquier número de argumentos en la cola ? por ejemplo, HandleAnotherMsg()? Usando q.put ((HandleAnotherMsg, 1, 2, 3)) se levantará un error de compilación :(
¿Puede publicar el error que está obteniendo? –