我在使用Python线程并在参数中发送字符串时遇到问题。
def processLine(line) : print "hello"; return;
。
dRecieved = connFile.readline(); processThread = threading.Thread(target=processLine, args=(dRecieved)); processThread.start();
其中dRecieved是连接读取的一行的字符串。它调用了一个简单的函数,到目前为止,该函数仅具有打印“ hello”的一项工作。
但是我收到以下错误
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.__target(*self.__args, **self.__kwargs)
在*self.__args将您的字符串转换成字符的列表,将它们传递给processLine 函数。如果将一个元素列表传递给它,它将将该元素作为第一个参数传递-在您的情况下为字符串。
*self.__args
processLine