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()