Параллельные вычисления в Python могут значительно ускорить выполнение вашего кода, особенно при работе с большими объемами данных или вычислительно сложными задачами. В этой статье мы рассмотрим основные подходы к реализации параллельных вычислений в Python с использованием стандартных библиотек, а также покажем примеры кода для каждого подхода.
Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
Многопоточность (Threading)
Многопоточность позволяет выполнять несколько потоков одновременно в рамках одного процесса. В Python можно использовать стандартную библиотеку threading
для создания и управления потоками. Однако из-за Global Interpreter Lock (GIL) в CPython, потоки не могут выполняться параллельно на нескольких ядрах процессора.
Пример простого многопоточного кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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() |
Многопроцессорность (Multiprocessing)
Многопроцессорность позволяет использовать несколько процессов для параллельного выполнения кода, что обеспечивает более эффективное использование многоядерных процессоров. В Python можно использовать стандартную библиотеку multiprocessing
для создания и управления процессами. Процессы могут выполняться параллельно на нескольких ядрах процессора, обойдя ограничения GIL.
Пример простого многопроцессорного кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import multiprocessing def print_numbers(): for i in range ( 10 ): print (i) def print_letters(): for letter in 'abcdefghij' : print (letter) process1 = multiprocessing.Process(target = print_numbers) process2 = multiprocessing.Process(target = print_letters) process1.start() process2.start() process1.join() process2.join() |
На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.
Конкурентность (Concurrent)
Библиотека concurrent.futures
предоставляет высокоуровневый интерфейс для асинхронного выполнения вызовов функций в параллельных потоках или процессах. Она позволяет легко создавать пулы потоков или процессов и выполнять задачи асинхронно, а также получать результаты выполнения.
Пример использования concurrent.futures
для параллельного выполнения функции:
1 2 3 4 5 6 7 8 9 10 | import concurrent.futures def square(x): return x * x with concurrent.futures.ThreadPoolExecutor() as executor: numbers = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] results = list (executor. map (square, numbers)) print (results) |
😉 Итак, в этой статье мы рассмотрели основные подходы к реализации параллельных вычислений в Python с использованием стандартных библиотек. Выбор подхода зависит от вашей задачи и требований к производительности кода. Не забывайте тестировать и оптимизировать ваш код, чтобы получить максимальную пользу от параллельных вычислений!
Добавить комментарий