Многопоточное программирование — это мощный инструмент для увеличения параллельности в Python. Он позволяет одновременно выполнять несколько задач внутри одного процесса. Это особенно полезно в многозадачных приложениях, где несколько операции должны выполняться параллельно. В этой статье мы рассмотрим многопоточность в Python.
Потоки в Python: особенности работы в практических примерах
Потоки — это небольшие подзадачи, которые выполняются внутри одного процесса. Они делят ресурсы процесса, такие как память и центральный процессор, и выполняются параллельно. В Python существует масса способов создания и управления потоками, но мы рассмотрим самый распространенный: библиотеку threading
, которая предоставляет простой способ работы с потоками:
import threading def print_numbers(): for i in range(1, 6): print(f"Number {i}") def print_letters(): for letter in 'abcde': print(f"Letter {letter}") # Создание потоков t1 = threading.Thread(target=print_numbers) t2 = threading.Thread(target=print_letters) # Запуск потоков t1.start() t2.start() # Ожидание завершения потоков t1.join() t2.join() print("Both threads have finished")
В этом примере мы создаем два потока, t1
и t2
, которые выполняют функции print_numbers
и print_letters
соответственно. Затем мы запускаем эти потоки и ждем их завершения с помощью метода join
. Это позволяет гарантировать, что оба потока выполнятся до вывода фразы Both threads have finished
.
Многопоточность также может использоваться для работы с общими ресурсами. Важно обеспечить безопасный доступ к этим ресурсам, чтобы избежать гонок данных. Для этого можно использовать блокировки:
import threading # Общий ресурс counter = 0 # Создание блокировки counter_lock = threading.Lock() def increment_counter(): global counter for _ in range(1000000): with counter_lock: counter += 1 def decrement_counter(): global counter for _ in range(1000000): with counter_lock: counter -= 1 # Создание потоков t1 = threading.Thread(target=increment_counter) t2 = threading.Thread(target=decrement_counter) # Запуск потоков t1.start() t2.start() # Ожидание завершения потоков t1.join() t2.join() print(f"Counter value: {counter}")
Здесь мы создаем два потока, t1
и t2
, которые увеличивают и уменьшают значение counter соответственно. Мы используем блокировку counter_lock
, чтобы предотвратить одновременный доступ к общему ресурсу.
Таким образом, потоки представляют собой мощный инструмент для увеличения параллельности в Python. Она позволяет выполнять несколько задач параллельно, что может значительно улучшить производительность ваших программ. Однако при работе с потоками следует быть осторожными, чтобы избежать проблем, связанных с гонками данных и блокировками.
Computer vision на Python
Код курса
VISI
Ближайшая дата курса
24 февраля, 2025
Продолжительность
40 ак.часов
Стоимость обучения
90 000 руб.
Все это делает Python универсальным и надежным средством для работы с производительными приложениями, а также с Big Data обработкой. Освоить Python на профессиональном уровне в разработчика различных приложений и прочих прикладных областях Data Science вы сможете на практических курсах по Python в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
- PREP: Подготовка данных для Data Mining на Python
- Разработка и внедрение ML-решений
- Графовые алгоритмы. Бизнес-приложения
- Нейронные сети на Python
- NLP с Python
Источники