Мультипоточность Python

многопоточность в Python

Python может реализовывать многопоточность, напрмер multiprocessing, threading, asincio, но в данной статье мы разберем threading.

theading - это библиотека python, в которой реализован класс Thread. Объект Thread представляет собой поток выполнения. Каждый раз, когда нам нужен новый поток, мы создаем новый Thread.

Поток выполняется отдельно, это значит, что у него есть свой стек вызовов. 

Использование

Ниже показан самый простой способ использования мультипоточности

import threading

class useThreading(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()

    def run(self):
        print("HI")

if __name__=="__main__":
   useThreading()

Теперь разберем каждую строчку этой программы

import threading

Здесь мы импортируем модуль threading, это можно сделать разными путями, но данный путь самый простой. Хотя могут встречаться и другие записи, например:

from threading import Thread

В данном случае мы импортируем только один класс Thread, из-за чего мы сможем обращаться к нему более удобно, но при такой записи другие методы модуля будут нам недоступны.

class useThreading(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()

Так как Thread является классом, значит и наследовать его могут только другие классы, что и показано выше

class useThreading - название нашего класса, useThreading может быть заменен на что угодно, по вашему желанию.

А вот то, что указано в скобках (threading.Thread) - означает от чего наследует наш класс.

def __init__(self):

Конструктор класса, но тут всё понятно, если вы не понимаете, что такое конструктор, то мультипоточность скорее всего вам будет более непонятна.

threading.Thread.__init__(self)

Здесь идет инициализация нового потока, заметим, что после (self) нет двоеточия.

self.start()

Чтобы новый поток запустился, необходимо его, как ни странно запустить. Новый поток запускается исключительно после вызова start().

def run(self):
    print("HI")

run является входной точкой в новый поток, и только с функции run начинает он работать. Данный метод может вызывать множество других методов, но начало начинается всегда с него.