В Python2 я использовал этот простой способ для запуска Thread
передачи параметров через аргументы:
import threading
class FuncThread(threading.Thread):
'''
it worked fine in Python2
'''
def __init__(self, target, *args):
self._target = target
self._args = args
print( self._args )
threading.Thread.__init__(self)
def run(self, *args):
print( self._args )
self._target(*self._args)
def testThreading(say=''):
print("I'm a thread %s" % say)
t = FuncThread(testThreading, 'hi')
t.start()
Теперь в Python3 это больше не работает, и я получаю
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "main.py", line 11, in run
self._target(*self._args)
TypeError: 'NoneType' object is not callable
, потому что в переопределении run
self._args
равны нулю.Если я использую новый синтаксис в Python3, это
# this works fine in Python3
threading.Thread(target=testThreading, args=('Hello Thread!',)).start()
, который работает нормально, так как правильно переопределить метод run
?