2017-02-10 4 views
0

Я только начал с многопоточной, поэтому я думал, что сделать себе небольшой и простой пример:Python многопоточность аргумент ошибки

import time 
import threading 

def count(who): 
     count = 1 
     while count <= 5: 
       print who + " counted to: " + str(count) 
       time.sleep(0.1) 
       count += 1 

thread1 = threading.Thread(target=count, args=('i')) 
thread1.start() 

Который прекрасно работает и печатает следующее:

>>> i counted to: 1 
>>> i counted to: 2 
>>> i counted to: 3 
>>> i counted to: 4 
>>> i counted to: 5 

странным, однако, когда я хочу, чтобы изменить аргумент к другому, как: "Джон":

thread1 = threading.Thread (TARGET = кол-во, Args = ('джон'))

Надеясь он будет производить:

>>> john counted to: 1 
>>> john counted to: 2 
>>> john counted to: 3 
>>> john counted to: 4 
>>> john counted to: 5 

Однако procudes ошибку:

Exception in thread Thread-1: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner 
    self.run() 
    File "/usr/lib/python2.7/threading.py", line 763, in run 
    self.__target(*self.__args, **self.__kwargs) 
TypeError: count() takes exactly 1 argument (4 given) 

Я действительно не уверен, что здесь происходит ... Кто-нибудь знает?

ответ

5

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

thread1 = threading.Thread(target=count, args=('john',)) 

В настоящее время питон считает скобка являются избыточными, так ("john") вычисляет "john", которые являются четыре символа, следовательно, сообщение вы получаете.

+0

О, ладно, я думаю, это имеет смысл. Спасибо за это объяснение! – user5740843

Смежные вопросы