2016-05-09 11 views
3

私は現在Pythonで作業している。私は、メッセージから文字列を取得する開始関数を持っています。すべてのメッセージのスレッドを開始したい。私はTypeErrorを取得し、理由を理解していない現時点ではPython:スレッドでのTypeError。関数はxの位置引数を取るが、yは与えられた

def startSuggestworker(message): 
    print(message) 

def start(): 
    while True: 
     response = queue.receive_messages() 
     try: 
      message = response.pop() 
      start_keyword = message.body 
      t = threading.Thread(target=startSuggestworker, args = (start_keyword)) 
      t.start() 
      message.delete() 
     except IndexError: 
      print("Messages empty") 
      sleep(150) 

start() 

:現時点で

スレッドはちょうどこのように私のメッセージを印刷する必要があります。例外のメッセージは、このいずれかになります。

Exception in thread Thread-1: 
Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 914, in _bootstrap_inner 
    self.run() 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 862, in run 
    self._target(*self._args, **self._kwargs) 
TypeError: startSuggestworker() takes 1 positional argument but y were given 

Y * =私の文字列の長さ

私が間違って何をしているのですか?

答えて

7

argsthreading.Threadは、反復可能であり、その反復可能な要素のそれぞれが目的関数に渡されます。
t = threading.Thread(target=startSuggestworker, args = (start_keyword))

各文字がstartSuggestworkerへの個別の引数として渡されている:あなたはargsのための文字列を提供しているので

代わりに、あなたはargsタプルを提供する必要があります:

t = threading.Thread(target=startSuggestworker, args = (start_keyword,))

関連する問題