Как сделать multiprocessing для одной функции запущенной несколько раз

Рейтинг: -1Ответов: 3Опубликовано: 11.02.2023

Есть одна функция, её нужно запустить 4 раза с разными данными так, чтобы все эти 4 раза функция запускались одновременно, с максимальной производительностью, а не поочерёдно. Буду благодарен любой помощи.

    def func(a1, a2, a3):
        a1 * 200 / 30
        a2 * 200 / 30
        a3 * 200 / 30
        print(a1, a2, a3)


func(32, 34, 54)
func(55, 64, 88)
func(12, 54, 98)
func(11, 23, 35)

Ответы

▲ 1Принят

Самый банальный вариант:

import multiprocessing


def func(a1, a2, a3):
    a1 * 200 / 30
    a2 * 200 / 30
    a3 * 200 / 30
    print(a1, a2, a3)


args = ((32, 34, 54), (55, 64, 88), (12, 54, 98), (11, 23, 35))

if __name__ == '__main__':
    for arg in args:
        multiprocessing.Process(target=func, args=arg).start()
▲ 1

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

import multiprocessing


def print_func(a1, a2, a3):
    a1 * 200 / 30
    a2 * 200 / 30
    a3 * 200 / 30
    print(a1, a2, a3)

if __name__ == '__main__':

    procs = []
    def run_process(a1, a2, a3):
        p = multiprocessing.Process(target=print_func, args=(a1, a2, a3,))
        procs.append(p)
        p.start()
        return p


    run_process(32, 34, 54)
    run_process(55, 64, 88)
    run_process(12, 54, 98)
    run_process(11, 23, 35)


    # complete the processes
    for proc in procs:
        proc.join()

▲ 0
args = ((32, 34, 54), (55, 64, 88), (12, 54, 98), (11, 23, 35))
with multiprocessing.Pool(processes=4) as p:
    p.starmap(func, args)