В настоящее время я учусь использовать SCOOP для распределения карты по нескольким узлам в кластере.Я использую метод внутри класса, который я использовал ранее для отображения задач на узле sinlge с использованием стандартной многопроцессорной обработки, методов пула, т.е. из пула импорта многопроцессорной обработки, current_process
class ExampleClass():
def __init__(self, list_of_genomes):
self.list_of_genomes = list_of_genomes
def distance_function(self, genome1, genome2):
# perform some kind of distance calculation and return the result
return distance
def createDistanceMatrix(self, child_process_chunksize, number_of_cores):
distance_matrix = []
for genome in tqdm(self.list_of_genomes):
with Pool(processes = number_of_cores) as pool:
fut = pool.starmap_async(self.distance_function, zip([genome] * len(self.list_of_genomes), self.list_of_genomes), chunksize = child_process_chunksize)
fut.wait()
distance_matrix.append(fut.get())
return distance_matrix
Однако, если я правильно понимаю SCOOP, тогдаmap
должно быть в пределах if __name__ == "__main__":
.Означает ли это, что вы не можете использовать SCOOP внутри метода класса?Если да, то есть ли другой способ использования нескольких узлов из метода класса?