Python线程string参数

我有一个Python线程的问题,并在参数中发送一个string。

def processLine(line) : print "hello"; return; 

 dRecieved = connFile.readline(); processThread = threading.Thread(target=processLine, args=(dRecieved)); processThread.start(); 

其中dRecieved是由连接读取的一行的string。 它所称的一个简单的function就是现在只有一个打印“你好”的工作。

不过,我得到以下错误

 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是我想要传递的string的长度,所以我想它把它分解成每个字符并试图传递这样的参数。 它工作正常,如果我只是调用函数正常,但我真的想把它设置为一个单独的线程。

你正试图创build一个元组,但是你只是用一个string括起来:)

添加一个额外的',':

 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将您的string转换为一个字符列表,并将它们传递给processLine函数。 如果你传递一个元素列表,它会传递这个元素作为第一个参数 – 在你的情况下,string。