首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保使用dispy将繁重的任务分配给其他节点?

如何确保使用dispy将繁重的任务分配给其他节点?
EN

Stack Overflow用户
提问于 2016-03-16 18:33:35
回答 1查看 132关注 0票数 0

目前,我正在使用dispy执行10个随机数的阶乘计算,其中“分发”任务到各个节点。但是,如果其中一种计算是大数factorial(100),的阶乘,那么如果该任务需要很长的时间,但只在单个节点上运行。

我如何确保分散分解并将此任务分发给其他节点,这样就不会花费那么多时间了?

这是我到目前为止提出的代码,其中计算了10个随机数的阶乘,第五次计算总是阶乘(100) :-

代码语言:javascript
复制
# '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()
EN

回答 1

Stack Overflow用户

发布于 2016-06-14 21:44:21

Dispy在定义任务时分配它们--它不会使任务变得更细。

您可以创建自己的逻辑,以便首先对任务进行粒度处理。对于一个阶乘来说,这可能很容易做到。但是,我想知道,在您的例子中,性能问题是否是由于这一行:

代码语言:javascript
复制
time.sleep(n)

对于阶乘( 100 ),你为什么要睡觉100秒?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36044171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档