manager - Python Threading Argumentos de cadena
queue python 3 (1)
Tengo un problema con el enrutamiento de Python y el envío de una cadena en los argumentos.
def processLine(line) :
print "hello";
return;
.
dRecieved = connFile.readline();
processThread = threading.Thread(target=processLine, args=(dRecieved));
processThread.start();
Donde dRecibved es la cadena de una línea leída por una conexión. Llama a una función simple que a partir de ahora solo tiene un trabajo de impresión "hola".
Sin embargo, recibo el siguiente error
Traceback (most recent call last):
File "C:/Python25/lib/threading.py", line 486, in __bootstrap_inner
self.run()
File "C:/Python25/lib/threading.py", line 446, in run
self.__target(*self.__args, **self.__kwargs)
TypeError: processLine() takes exactly 1 arguments (232 given)
232 es la longitud de la cuerda que estoy tratando de pasar, así que supongo que es dividirla en cada personaje e intentar pasar los argumentos de esa manera. Funciona bien si solo llamo a la función normalmente, pero realmente me gustaría configurarla como un hilo separado.
Estás tratando de crear una tupla, pero solo estás entrelazando una cadena :)
Agregue un extra '','':
dRecieved = connFile.readline()
processThread = threading.Thread(target=processLine, args=(dRecieved,)) # <- note extra '',''
processThread.start()
O usa corchetes para hacer una lista:
dRecieved = connFile.readline()
processThread = threading.Thread(target=processLine, args=[dRecieved])) # <- 1 element list
processThread.start()
Si lo notas, desde el rastro de la pila: self.__target(*self.__args, **self.__kwargs)
El *self.__args
convierte su cadena en una lista de caracteres, pasándolos a la función processLine
. Si le pasa una lista de un elemento, pasará ese elemento como primer argumento, en su caso, la cadena.