Python Threading, Arg превращается в список

Ок, у меня есть функция, главная тема

def main_thread(self, item):
     print(item)

И это называется

item = self.queue.pop(0)
print(item)
threading.Thread(target=self.main_thread,args=(item)).start()

Элемент очереди "что-то", когда я печатаю его перед вызовом потока, он печатается правильно. но по какой-то причине его всегда превращали в список s,o,m,e,t,h,i,n,g, то есть я не могу использовать

def main_thread(self, item):

потому что он говорит, что я пытаюсь передать в 10 аргументов, каждая буква 1. если я использую

def main_thread(self, *args):

я просто получил 10 аргументов. У меня никогда не было этой проблемы раньше, но, конечно, должен быть лучший способ, чем перестраивать строку буква за буквой

2 ответа

Решение

Аргументы должны быть кортежем, вы передаете строку, поэтому каждый символ интерпретируется как один аргумент:

args=(item,) # <- add a , to make a tuple

Строки являются итеративными, поэтому это эквивалентно разнице между:

In [2]: for ele in s:
   ...:     print(s)
   ...:     
foobar
foobar
foobar
foobar
foobar
foobar

In [3]: for ele in (s,):
           print(s)
   ...:     
foobar

Это потому, что вы не передаете кортеж функции. Попробуй это:

threading.Thread(target=self.main_thread,args=(item,)).start()
Другие вопросы по тегам