Python многопоточность: как создавать параллельные потоки и ускорять работу программы
Python - это удивительный язык программирования, который поддерживает многопоточность. Многопоточность - это метод организации параллельной работы нескольких процессов (потоков), которые выполняются одновременно и независимо друг от друга. Параллельное выполнение потоков ускоряет работу программы, увеличивает ее производительность и позволяет выполнять задачи, требующие большого количества времени или ресурсов.
В Python для работы с многопоточностью можно использовать встроенный модуль threading. Он позволяет создавать новые потоки, управлять ими, а также синхронизировать их работу. Вот пример создания и запуска потока:
python
import threading
def worker():
print('Worker started')
# Здесь выполняется работа потока
print('Worker finished')
# Создание нового потока
t = threading.Thread(target=worker)
# Запуск потока
t.start()
print('Main thread finished')
В этом примере создается новый поток, вызывается функция worker, которая выполняется в отдельном потоке, и завершается главный поток. Выше есть некоторые моменты, которые можно редактировать или изменять. Говоря о threading модуле в Python, есть еще одна функция, называемая Lock
python
import threading
counter = 0
lock = threading.Lock()
def worker():
global counter
lock.acquire()
# здесь выполняется работа потока
counter += 1
lock.release()
# Создание нескольких потоков
threads = []
for i in range(5):
t = threading.Thread(target=worker)
threads.append(t)
# Запуск потоков
for t in threads:
t.start()
# Ожидание завершения работы всех потоков
for t in threads:
t.join()
print('Counter =', counter)
Здесь мы создаем несколько потоков и выполняем в них функцию worker, которая увеличивает значение глобальной переменной counter на единицу. Чтобы избежать проблем с одновременного обращения к этой переменной из разных потоков, используется объект Lock.
Обращение к переменной counter только от одного потока за один раз, блокируя ее на выполнение работы (аналогия с ожиданием одного за один продукт на кассе в магазине).
В Python могут быть и другие модули для работы с многопоточностью (например, multiprocessing), но threading - самый простой и широко используемый.