Многопоточность и параллельность - это два понятия, связанных с одновременным выполнением кода в программировании. В языке программирования Python существуют различные подходы для реализации многопоточности и параллельности.
Многопоточность - это способность программы или операционной системы одновременно выполнять несколько потоков исполнения. Поток (thread) - это легковесный подпроцесс, который может выполняться параллельно с другими потоками в рамках одного процесса. В Python многопоточность реализуется с использованием модуля threading
.
Модуль threading
предоставляет класс Thread
, который можно наследовать и переопределить метод run()
, содержащий код, который должен выполняться в отдельном потоке. Для создания и запуска потока исполнения используется функция start()
.
Например, рассмотрим следующий код:
import threading def print_numbers(): for i in range(10): print(i) def print_letters(): for i in range(ord('A'), ord('K')): print(chr(i)) if __name__ == "__main__": thread1 = threading.Thread(target=print_numbers) thread2 = threading.Thread(target=print_letters) thread1.start() thread2.start() thread1.join() thread2.join()
В этом примере создаются два потока, первый печатает цифры от 0 до 9, а второй печатает буквы от A до J. Затем оба потока запускаются с использованием метода start()
. После запуска, потоки выполняются параллельно в процессоре до завершения своей работы. Затем мы используем метод join()
, чтобы главный поток дождался завершения работы обоих потоков.
Параллельность - это способность программы или операционной системы выполнять одновременные вычисления на нескольких процессорах или ядрах процессора. В Python для реализации параллельности существуют различные подходы.
Один из подходов - использование модуля multiprocessing
, который предоставляет класс Process
, позволяющий создавать и запускать процессы. Процесс является отдельной программой со своим собственным адресным пространством и ресурсами. Преимущество использования multiprocessing
заключается в том, что он позволяет использовать несколько ядер процессора для выполнения вычислений параллельно.
import multiprocessing def print_numbers(): for i in range(10): print(i) def print_letters(): for i in range(ord('A'), ord('K')): print(chr(i)) if __name__ == "__main__": process1 = multiprocessing.Process(target=print_numbers) process2 = multiprocessing.Process(target=print_letters) process1.start() process2.start() process1.join() process2.join()
В этом примере создаются два процесса, аналогично примеру с потоками. Они запускаются и выполняются параллельно на разных ядрах процессора.
Кроме модуля threading
и multiprocessing
, в Python также существуют и другие инструменты для работы с многопоточностью и параллельностью, такие как concurrent.futures
, asyncio
и другие. Какой инструмент использовать, зависит от конкретных требований и задачи, с которыми вы сталкиваетесь.