我遇到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.__args
将您的字符串转换成字符的列表,将它们传递给processLine
函数.如果您传递一个元素列表,它将传递该元素作为第一个参数 - 在您的情况下,字符串.