Я бы предложил использовать Ray , которая является библиотекой для параллельного и распределенного Python.Он обладает некоторыми преимуществами по сравнению со стандартными библиотеками потоков и многопроцессорных систем.
- Один и тот же код будет выполняться на одной или нескольких машинах.
- Вы можете распараллеливать функции и классы.
- Объекты эффективно распределяются между задачами, использующими разделяемую память.
Чтобы обеспечить простой исполняемый пример, я буду использовать функции и классы вместо модулей, но вы всегда можете обернуть модуль вфункция или класс.
Подход 1: Параллельные функции с использованием задач .
import ray
import time
ray.init()
@ray.remote
def mod1():
time.sleep(3)
@ray.remote
def mod2():
time.sleep(3)
@ray.remote
def mod3():
time.sleep(3)
if __name__ == '__main__':
# Start the tasks. These will run in parallel.
result_id1 = mod1.remote()
result_id2 = mod2.remote()
result_id3 = mod3.remote()
# Don't exit the interpreter before the tasks have finished.
ray.get([result_id1, result_id2, result_id3])
Подход 2: Параллельные классы используя актеров .
import ray
import time
# Don't run this again if you've already run it.
ray.init()
@ray.remote
class Mod1(object):
def run(self):
time.sleep(3)
@ray.remote
class Mod2(object):
def run(self):
time.sleep(3)
@ray.remote
class Mod3(object):
def run(self):
time.sleep(3)
if __name__ == '__main__':
# Create 3 actors.
mod1 = Mod1.remote()
mod2 = Mod2.remote()
mod3 = Mod3.remote()
# Start the methods, these will run in parallel.
result_id1 = mod1.run.remote()
result_id2 = mod2.run.remote()
result_id3 = mod3.run.remote()
# Don't exit the interpreter before the tasks have finished.
ray.get([result_id1, result_id2, result_id3])
Вы можете просмотреть документацию Ray .