@caterina
В Python есть несколько способов распараллеливания процессов. Рассмотрим некоторые из них.
- Модуль multiprocessing:
Модуль multiprocessing предоставляет функциональность для создания и управления процессами. Он позволяет выполнять задачи параллельно с использованием нескольких процессов. Один из способов использования этого модуля - создание объектов класса Process, при помощи которых можно выполнять задачи параллельно.
Пример:
from multiprocessing import Process
def my_function(arg):
# выполнение задачи
if __name__ == '__main__':
p1 = Process(target=my_function, args=(arg1,))
p2 = Process(target=my_function, args=(arg2,))
p1.start()
p2.start()
p1.join()
p2.join()
В этом примере создаются два процесса, каждый выполняет функцию my_function с соответствующим аргументом.
- Модуль concurrent.futures:
Модуль concurrent.futures предоставляет высокоуровневый интерфейс для распараллеливания задач. Он предоставляет классы ThreadPoolExecutor и ProcessPoolExecutor, которые позволяют выполнять задачи параллельно с использованием потоков или процессов.
Пример с использованием ThreadPoolExecutor:
from concurrent.futures import ThreadPoolExecutor
def my_function(arg):
# выполнение задачи
if __name__ == '__main__':
with ThreadPoolExecutor() as executor:
results = executor.map(my_function, [arg1, arg2])
В этом примере создается пул потоков, в котором выполняются функции my_function с аргументами arg1 и arg2.
- Модуль threading:
Модуль threading предоставляет функциональность для создания и управления потоками в Python. Потоки позволяют выполнять задачи параллельно, но на одном процессе. Однако, из-за Global Interpreter Lock (GIL) в Python, потоки могут не давать значительного прироста производительности для CPU-зависимых задач.
Пример:
import threading
def my_function(arg):
# выполнение задачи
if __name__ == '__main__':
t1 = threading.Thread(target=my_function, args=(arg1,))
t2 = threading.Thread(target=my_function, args=(arg2,))
t1.start()
t2.start()
t1.join()
t2.join()
В этом примере создаются два потока, каждый выполняет функцию my_function с соответствующим аргументом.
Обратите внимание, что не все задачи пригодны для распараллеливания, и в распределении задач на процессы/потоки есть некоторые издержки.