Экземпляры класса threading.Thread представляют потоки Python-программы. Задать действия, которые будут выполняться в потоке, можно двумя способами: передать конструктору класса исполняемый объект и аргументы к нему или путем наследования получить новый класс с переопределенным методом run(). Первый способ был рассмотрен в примере выше. Конструктор класса threading.Thread имеет следующие аргументы:
Thread(group, target, name, args, kwargs)
Здесь group - группа потоков (пока что не используется, должен быть равен None), target - объект, который будет вызван в методе run(), name - имя потока, args и kwargs - последовательность и словарь позиционных и именованных параметров (соответственно) для вызова заданного в параметре target объекта. В примере выше были использованы только позиционные параметры, но то же самое можно было выполнить и с применением именованных параметров:
import threading
def proc(n): print "Процесс", n
p1 = threading.Thread(target=proc, name="t1", kwargs={"n": "1"}) p2 = threading.Thread(target=proc, name="t2", kwargs={"n": "2"}) p1.start() p2.start()
То же самое можно проделать через наследование от класса threading.Thread с определением собственного конструктора и метода run():
import threading
class T(threading.Thread): def __init__(self, n): threading.Thread.__init__(self, name="t" + n) self.n = n def run(self): print "Процесс", self.n
p1 = T("1") p2 = T("2") p1.start() p2.start()
Самое первое, что необходимо сделать в конструкторе - вызвать конструктор базового класса. Как и раньше, для запуска потока нужно выполнить метод start() объекта-потока, что приведет к выполнению действий в методе run().
Жизнью потоков можно управлять вызовом методов: