threads threading thread manager manage example python multithreading

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.