Ответ 1
Вы передаете результат self.read целевому аргументу Thread. Ожидается, что потоку будет передана функция для вызова, поэтому просто удалите скобки и не забудьте запустить поток:
t1=threading.Thread(target=self.read)
t1.start()
print "something"
Для целей, которым нужны аргументы, вы можете использовать args
и kwargs
для создания threading.Thread
Это также можно использовать лямбда-выражения. Например, чтобы запустить f(a, b, x=c)
в потоке, вы можете использовать
thread = threading.Thread(target=f, args=(a, b), kwargs={'x': c})
или же
thread = threading.Thread(target=lambda: f(a, b, x=c))
хотя будьте осторожны, если вы выберете лямбду - лямбда будет искать f
, a
, b
и c
во время использования, а не когда lambda
определена, поэтому вы можете получить неожиданные результаты, если переназначите любую из этих переменных перед потоком запланировано (что может занять произвольно много времени, даже если вы сразу же позвоните start
).