Это можно сделать элегантно с Ray , системой, которая позволяет вам легко распараллеливать и распространять ваш код Python.
Чтобы распараллелить ваш пример, вам нужно определить свои функции с помощью @ray.remote decorator
, а затем вызвать их с помощью .remote
.
import ray
ray.init()
# Define functions you want to execute in parallel using
# the ray.remote decorator.
@ray.remote
def func1():
print("Working")
@ray.remote
def func2():
print("Working")
# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
Если func1()
и func2()
возвращают результаты, вам нужно немного переписать приведенный выше код, заменив ray.get([func1.remote(), func2.remote()])
на:
ret_id1 = func1.remote()
ret_id2 = func1.remote()
ret1, ret2 = ray.get([ret_id1, ret_id2])
Существует ряд преимуществ использования Ray по сравнению с многопроцессорным модулем или использования многопоточности. В частности, тот же код будет работать как на одной машине, так и на кластере машин.
Подробнее о Луче см. этот пост .