Чтобы устранить некоторую путаницу относительно того, принимает ли переопределенный метод run()
дополнительные аргументы, ниже приведена реализация переопределенного метода run()
, который делает то, что делает метод, унаследованный от threading.Thread
.
Обратите внимание, это просто чтобы посмотреть, как можно переопределить run()
; это не должно быть значимым примером. Если все, что вы хотите сделать, это вызвать целевую функцию с последовательными и / или ключевыми аргументами, то необязательно иметь подкласс; на это было указано, например, в ответ Иерува на этот вопрос.
Следующий код поддерживает Python v2 и v3.
Хотя, в частности, доступ к искаженным именам атрибутов в коде Python 2 ужасен, я не знаю другого способа доступа к этим атрибутам (дайте мне знать, если вы его знаете ...):
import sys
import threading
class DestinationThread(threading.Thread):
def run(self):
if sys.version_info[0] == 2:
self._Thread__target(*self._Thread__args, **self._Thread__kwargs)
else: # assuming v3
self._target(*self._args, **self._kwargs)
def func(a, k):
print("func(): a=%s, k=%s" % (a, k))
thread = DestinationThread(target=func, args=(1,), kwargs={"k": 2})
thread.start()
thread.join()
Он печатает (протестировано с Python 2.6, 2.7 и 3.4 на Windows 7):
func(): a=1, k=2