I am working with Python at the moment. I have a start-function
, that gets a string from a message. I want to start threads for every message.
The thread at the moment should just print out my message like this:
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()
At the moment I get a TypeError
and don't understand why. The Exception message is this one:
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 = length of my String
What am I doing wrong?
The args
kwarg of threading.Thread
expects an iterable, and each element in that iterable is being passed to the target function.
Since you are providing a string for args
:t = threading.Thread(target=startSuggestworker, args=(start_keyword))
each character is being passed as a separate argument to startSuggestworker
.
Instead, you should provide args
a tuple:
t = threading.Thread(target=startSuggestworker, args=(start_keyword,)) # ^ note the comma
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With