Есть задача, которую мне нужно повторить примерно миллион раз. Задача сама по себе «короткая», но ее выполнение все равно займет около 5 часов, поэтому я хочу ее распараллелить. Вот как выглядит задание:
Код: Выделить всё
def general(N, BORDER): #N and BORDER are two positive integers that are fixed
(...)
return r,A #r is an integer or None, M is an adj matrix
(...) — это случайный процесс, поэтому мне не нужна какая-либо связь между рабочими узлами. Я просто хочу, чтобы этот процесс выполнялся в общей сложности миллион раз.
Я пытался использовать для этого ray, так как увидел, что он довольно мощный по сравнению с некоторыми другими пакетами, такими как многопроцессорность. Поэтому я сделал следующее :
Код: Выделить всё
ray.init()
(...)
@ray.remote
def general(N, BORDER): #N and BORDER are two positive integers that are fixed
(...)
return r,A #r is an integer or None, M is an adj matrix
(...)
for i in range(10**7):
r,A = general.remote(N,BORDER)
это не работает, но я знаю почему. вызов General.remote() возвращает что-то вроде ObjectRef(c8ef45ccd0112571ffffffffffffffffffffff0100000001000000), который априори не может быть разбит на кортеж, поэтому неудивительно, почему он не работает: мне нужно сделать что-то дополнительное, чтобы это исправить. Я подумал, что в какой-то момент мне следует использовать ray.get(), но во всех примерах, которые я видел, я так и не понял, насколько именно это соответствует моей проблеме. Например, здесь показан пример использования ray.get() со списками; но списка того, что я делаю, нет.
Поэтому мой вопрос: действительно ли Ray адаптирован для того, что я хочу делать?
Подробнее здесь:
https://stackoverflow.com/questions/790 ... llel-tasks