Pythonのスレッド化と引数の文字列の送信に問題があります。
def processLine(line) :
print "hello";
return;
。
dRecieved = connFile.readline();
processThread = threading.Thread(target=processLine, args=(dRecieved));
processThread.start();
DRecievedは、接続によって読み取られる1行の文字列です。現時点では、「hello」を印刷するジョブが1つしかない単純な関数を呼び出します。
ただし、次のエラーが表示されます
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は私が渡そうとしている文字列の長さなので、それを各文字に分割し、そのような引数を渡そうとしていると思います。普通に関数を呼び出すだけでうまくいきますが、別のスレッドとして設定したいのです。
タプルを作成しようとしていますが、文字列を括弧で囲んでいるだけです:)
追加の「、」を追加します。
dRecieved = connFile.readline()
processThread = threading.Thread(target=processLine, args=(dRecieved,)) # <- note extra ','
processThread.start()
または、括弧を使用してリストを作成します。
dRecieved = connFile.readline()
processThread = threading.Thread(target=processLine, args=[dRecieved]) # <- 1 element list
processThread.start()
気づいたら、スタックトレースから:self.__target(*self.__args, **self.__kwargs)
*self.__args
は、文字列を文字のリストに変換し、processLine
関数に渡します。 1つの要素のリストを渡すと、その要素を最初の引数として(あなたの場合は文字列として)渡します。