Многопоточное программирование — это мощный инструмент для увеличения параллельности в 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. Она позволяет выполнять несколько задач параллельно, что может значительно улучшить производительность ваших программ. Однако при работе с потоками следует быть осторожными, чтобы избежать проблем, связанных с гонками данных и блокировками.
Код курса
VISI
Ближайшая дата курса
по запросу
Продолжительность
ак.часов
Стоимость обучения
0 руб.
Все это делает Python универсальным и надежным средством для работы с производительными приложениями, а также с Big Data обработкой. Освоить Python на профессиональном уровне в разработчика различных приложений и прочих прикладных областях Data Science вы сможете на практических курсах по Python в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
- PREP: Подготовка данных для Data Mining на Python
- Разработка и внедрение ML-решений
- Графовые алгоритмы. Бизнес-приложения
- Нейронные сети на Python
- NLP с Python
Источники



