10 Июл 2023
2 мин
1205

Как работать с многопоточностью в Python

Освойте многопоточность в Python с примерами кода: создание потоков, синхронизация данных и использование ThreadPoolExecutor.

Содержание

Многопоточность — это одновременное выполнение нескольких потоков в одном процессе. В 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 и можете применять эти знания на практике. Удачного кодирования! 😉

Содержание

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

Определи профессию по рисунку
Пройдите тест, узнайте какой профессии подходитеНачать тест
+