Многопоточность — это одновременное выполнение нескольких потоков в одном процессе. В Python для работы с многопоточностью используется модуль threading. В данной статье мы рассмотрим основы работы с многопоточностью и покажем примеры кода.
Создание потоков
Для создания потока вы можете использовать класс Thread из модуля threading. Вот пример создания и запуска двух потоков:
import threading
def print_numbers():
for i in range(10):
print(i)
def print_letters():
for letter in 'abcdefghij':
print(letter)
# Создаем потоки
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)
# Запускаем потоки
thread1.start()
thread2.start()
# Ждем завершения потоков
thread1.join()
thread2.join()
В этом примере два потока выполняют функции print_numbers и print_letters одновременно. Вызов метода start() запускает поток, а метод join() блокирует выполнение основного потока до завершения вызываемого потока.
Синхронизация потоков
При работе с многопоточностью важно обеспечить синхронизацию данных между потоками. Для этого в Python используются блокировки (Locks). Вот пример использования блокировок:
import threading
# Создаем блокировку
lock = threading.Lock()
def safe_print(item):
with lock:
print(item)
def print_numbers():
for i in range(10):
safe_print(i)
def print_letters():
for letter in 'abcdefghij':
safe_print(letter)
# Создаем потоки
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)
# Запускаем потоки
thread1.start()
thread2.start()
# Ждем завершения потоков
thread1.join()
thread2.join()
В этом примере мы создали блокировку lock и использовали ее в функции safe_print() для синхронизации доступа к функции print(). Таким образом, потоки не будут конфликтовать при выводе данных.
Работа с ThreadPoolExecutor
Для упрощения работы с потоками вы можете использовать класс ThreadPoolExecutor из модуля concurrent.futures. Вот пример использования ThreadPoolExecutor для выполнения задач параллельно:
from concurrent.futures import ThreadPoolExecutor
def square(x):
return x * x
# Создаем ThreadPoolExecutor с 4-мя потоками
with ThreadPoolExecutor(max_workers=4) as executor:
# Запускаем задачи и получаем результаты
results = list(executor.map(square, range(10)))
print(results)
В этом примере мы создали ThreadPoolExecutor с 4 потоками и использовали метод map() для выполнения функции square() с аргументами от 0 до 9. Результаты выполнения функции собираются в список.
Теперь вы знаете основы работы с многопоточностью в Python и можете применять эти знания на практике. Удачного кодирования! 😉
Перейти в телеграм, чтобы получить результаты теста





Забрать
Добавить комментарий