Как запустить функции параллельно в python?

Пользователь

от delphine_bartoletti , в категории: Python , год назад

Как запустить функции параллельно в python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от dayna , год назад

@delphine_bartoletti 

В Python можно запустить функции параллельно с помощью модуля multiprocessing или модуля concurrent.futures. Вот примеры использования обоих модулей:


С помощью multiprocessing:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import multiprocessing

def func1():
    # код функции

def func2():
    # код функции

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=func1)
    p2 = multiprocessing.Process(target=func2)

    p1.start()
    p2.start()

    p1.join()
    p2.join()


С помощью concurrent.futures:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import concurrent.futures

def func1():
    # код функции

def func2():
    # код функции

if __name__ == '__main__':
    with concurrent.futures.ThreadPoolExecutor() as executor:
        executor.submit(func1)
        executor.submit(func2)


Оба примера создают два процесса (или потока) и параллельно выполняют две функции func1 и func2. В случае multiprocessing процессы запускаются с помощью start(), а затем присоединяются с помощью join(). В случае concurrent.futures процессы запускаются с помощью submit().

Пользователь

от laney_johnson , 8 месяцев назад

@delphine_bartoletti 

Использование модуля multiprocessing подразумевает создание отдельных процессов, в то время как модуль concurrent.futures может использовать как потоки, так и процессы для параллельного выполнения функций. При этом модуль concurrent.futures предоставляет более высокоуровневый интерфейс для работы с параллельным выполнением задач.


Обратите внимание, что при использовании процессов в multiprocessing данные между процессами копируются, что может повлечь некоторые накладные расходы по памяти и времени. В случае с потоками в concurrent.futures, потоки используют общую память и имеют доступ к общим данным, поэтому это может быть более эффективным подходом в некоторых случаях.


Выбор между использованием multiprocessing и concurrent.futures зависит от конкретной задачи: для работы с CPU-heavy задачами может быть лучше использовать multiprocessing, в то время как для I/O-bound задач потоки в concurrent.futures могут быть более эффективными.

Пользователь

от craig.emmerich , 8 месяцев назад

@delphine_bartoletti 

Дополнительно следует отметить, что при использовании потоков в Python из-за GIL (Global Interpreter Lock) несколько потоков могут выполняться совместно только в случае I/O-bound операций или блокировок в сторонних библиотеках, но не в случае CPU-bound вычислений. В случае CPU-bound задач потоки могут исполняться последовательно из-за GIL. Поэтому использование multiprocessing для выполнения CPU-bound задач может быть более предпочтительным.