Потоки (Threading) в Python
Содержание
Что такое поток?
Поток исполнения является наименьшим последовательность запрограммированных инструкций , которые могут управляться независимо друг от друга с помощью планировщика , который обычно является частью операционной системы. Поток в компьютерной программе - это путь выполнения. Threading создает дополнительные независимые пути выполнения в вашей программе. Каждая программа начинается с хотя бы одного пути выполнения / потока. Вы можете создавать больше потоков для выполнения параллельных задач в зависимости от ваших требований. Это концепция эффективного использования ресурсов . Наличие нескольких потоков в приложении обеспечивает два очень важных потенциальных преимущества:
Улучшение восприимчивости приложения.
Улучшите производительность приложений в режиме реального времени в многоядерных системах.
Для этого есть библиотеки. Важно отметить, что Threading требует тщательной синхронизации, чтобы избежать условий гонки.
Как создать поток в Python
Модуль «поток» обеспечивает простую функциональность, и более высокий уровень интерфейса предоставляется в потоковом модуле, который должен использоваться вместо этого. Первое, что вам нужно сделать, это импортировать Thread, используя следующий код:
from threading import Thread
Простая программа Thread
В следующем примере показано, как запустить функцию как потоки в Python. Самый простой способ - через модуль потока и его метод start_new_thread() .
def yourFunc(): print "Funcion called!!" thread.start_new_thread(yourFunc,())
Thread.start_new_thread начать новую нить и возвращает его идентификатор. Когда функция возвращается, поток бесшумно выходит.
Пример:
import time from threading import Thread def myfunc(i): print ("Before Sleep :", i) time.sleep(5) print ("After Sleep :", i) for i in range(10): t = Thread(target=myfunc, args=(i,)) t.start()
Создание класса Thread в Python
Python предоставляет модуль потоковой передачи, который реализует слой поверх модуля потока . Модуль потоковой передачи предоставляет, помимо прочего, класс Thread, который содержит метод run() . Типичное использование заключается в подклассе класса Thread и переопределении метода run() в подклассе для реализации требуемой функциональности. Чтобы создать поток в Python, вы хотите, чтобы ваш класс работал как поток. Для этого вы должны подклассифицировать свой класс из класса Thread .
class MyThreadClass(threading.Thread): def run(self):
Здесь MyThreadClass является дочерним классом класса Thread . Следующий шаг - определить метод запуска в этом классе. Метод run() в MyThreadClass является точкой входа для потока. Метод run() будет выполнен, когда мы вызываем метод начала любого объекта в нашем классе MyThreadClass. Вы можете написать код внутри метода run() для запуска потока. Можно передать функцию или другой вызываемый объект в конструктор класса Thread, чтобы указать цель, которую вызовет метод run(). Для этого мы можем использовать функцию thread.start_new_thread :
t = MyThreadClass() t.start()
Полный код
import threading import datetime class MyThreadClass(threading.Thread): def run(self): dt = datetime.datetime.now() print (self.getName(), " Current Date and Time : ", dt) for i in range(5): t = MyThreadClass() t.start()
Вывод:
Thread-1 Current Date and Time : 2015-10-04 17:09:48.423745 Thread-2 Current Date and Time : 2015-10-04 17:09:48.423745 Thread-3 Current Date and Time : 2015-10-04 17:09:48.423745 Thread-4 Current Date and Time : 2015-10-04 17:09:48.423745 Thread-5 Current Date and Time : 2015-10-04 17:09:48.423745
В приведенном выше примере вы можете видеть, что класс ThreadClass наследует от threading.Thread, и из-за этого вам нужно определить метод run(), который выполняет код, который вы запускаете внутри потока. Единственное, что важно отметить в методе run: self.getName() - это метод, который идентифицирует имя потока. Наконец, t.start() - это то, что фактически запускает потоки.
Источник: net-informations.com