Ich habe ein Problem mit dem Python-Threading und dem Senden einer Zeichenfolge in den Argumenten.
def processLine(line) :
print "hello";
return;
.
dRecieved = connFile.readline();
processThread = threading.Thread(target=processLine, args=(dRecieved));
processThread.start();
Wobei dRecieved die Zeichenfolge einer Zeile ist, die von einer Verbindung gelesen wird. Es ruft eine einfache Funktion auf, die ab sofort nur noch einen Druckauftrag "Hallo" hat.
Ich erhalte jedoch den folgenden Fehler
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 ist die Länge der Zeichenfolge, die ich übergeben möchte. Ich denke, sie wird in jedes Zeichen aufgeteilt und versucht, die Argumente so zu übergeben. Es funktioniert gut, wenn ich die Funktion nur normal aufrufe, aber ich möchte sie wirklich als separaten Thread einrichten.
python
multithreading
Anonym
quelle
quelle
Antworten:
Sie versuchen, ein Tupel zu erstellen, aber Sie setzen nur eine Zeichenfolge in Klammern :)
Fügen Sie ein zusätzliches ',' hinzu:
Oder verwenden Sie Klammern, um eine Liste zu erstellen:
Wenn Sie bemerken, aus dem Stack-Trace:
self.__target(*self.__args, **self.__kwargs)
Das
*self.__args
verwandelt Ihre Zeichenfolge in eine Liste von Zeichen, die an dieprocessLine
Funktion übergeben werden. Wenn Sie eine Liste mit einem Element übergeben, wird dieses Element als erstes Argument übergeben - in Ihrem Fall als Zeichenfolge.quelle
threading.Thread(target=thread_function, args=(arg1,),kwargs={'arg2': arg2})
Ich hoffe, hier mehr Hintergrundwissen zu vermitteln.
Zunächst die Konstruktorsignatur der of-Methode threading :: Thread :
Zweitens eine Eigenart in Python über
tuple
:Andererseits ist eine Zeichenfolge eine Folge von Zeichen wie
'abc'[1] == 'b'
. Wenn Sie also eine Zeichenfolge an sendenargs
, auch in Klammern (immer noch ein Stich), wird jedes Zeichen als einzelner Parameter behandelt.Python ist jedoch so integriert und ähnelt nicht JavaScript, bei dem zusätzliche Argumente toleriert werden können. Stattdessen wirft es ein, sich
TypeError
zu beschweren.quelle