Как обеспечить распространение тяжелой задачи на другие узлы, используя dispy?
В настоящее время я выполняю вычисление факториала из 10 случайных чисел, используя dispy, который "распределяет" задачи по различным узлам. Однако, если одно из вычислений имеет факториал большого числа, скажем, факториал (100), то, если эта задача занимает очень много времени, но disy запускает ее только на одном узле.
Как мне убедиться, что disy не работает и распределяет эту задачу по другим узлам, чтобы это не занимало так много времени?
Вот код, который я до сих пор придумал, где вычисляется факториал из 10 случайных чисел, а 5-е вычисление всегда имеет факториал (100):-
# 'compute' is distributed to each node running 'dispynode'
def compute(n):
import time, socket
ans = 1
for i in range(1,n+1):
ans = ans * i
time.sleep(n)
host = socket.gethostname()
return (host, n,ans)
if __name__ == '__main__':
import dispy, random
cluster = dispy.JobCluster(compute)
jobs = []
for i in range(10):
# schedule execution of 'compute' on a node (running 'dispynode')
# with a parameter (random number in this case)
if(i==5):
job = cluster.submit(100)
else:
job = cluster.submit(random.randint(5,20))
job.id = i # optionally associate an ID to job (if needed later)
jobs.append(job)
# cluster.wait() # waits for all scheduled jobs to finish
for job in jobs:
host, n, ans = job() # waits for job to finish and returns results
print('%s executed job %s at %s with %s as input and %s as output' % (host, job.id, job.start_time, n,ans))
# other fields of 'job' that may be useful:
# print(job.stdout, job.stderr, job.exception, job.ip_addr, job.start_time, job.end_time)
cluster.print_status()
1 ответ
Dispy распределяет задачи по мере их определения - это не делает задачи более детальными для вас.
Вы могли бы создать свою собственную логику для гранулирования задач в первую очередь. Это, вероятно, довольно легко сделать для факториала. Однако мне интересно, если в вашем случае проблема производительности связана с этой строкой:
time.sleep(n)
Для факториала (100), почему вы хотите спать 100 секунд?