18c0693f

Класс Thread


Экземпляры класса 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().

Жизнью потоков можно управлять вызовом методов:



В модуле Thread пока что не реализованы возможности, присущие потокам в Java (определение групп потоков, приостановка и прерывание потоков извне, приоритеты и некоторые другие вещи), однако они, скорее всего, будут созданы в недалеком будущем.




Все публикации раздела