首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dispy导入python作业中的模块

使用dispy导入python作业中的模块
EN

Stack Overflow用户
提问于 2016-05-29 23:40:37
回答 3查看 655关注 0票数 1

我正在使用一个与dispy并行执行的程序。我使用dispy创建任务,然后将其分发到不同的CPU上执行。

我有标准库和我自己开发的库(数据和连接)。

代码如下:

代码语言:javascript
复制
import dispy
import sys
import data
import connection

def compute(num):
    #some code that call data and connection methods, and generate a solution
    return solution

def main():
    cluster = dispy.JobCluster(compute)
    jobs = []

    for i in range(10)
        job = cluster.submit(i)
        job.id = i # optionally associate an ID to job (if needed later)
        jobs.append(job)

    for job in jobs:
        job()
        print "Result = " + str(job.result)
        print "Exception = " + str(job.exception)

if __name__ == "__main__":
    main() 

`

问题是,如果我需要在main def中处理数据和连接,而且如果我将计算作为一个函数调用,而不是使用dispy库,那么它就可以正常工作。但是当我这样工作的时候,在计算过程中调用一个数据函数,它抛出了一个异常,数据没有定义,打印异常无。

有什么帮助吗?文档建议使用设置,但我不知道它是如何工作的。

EN

回答 3

Stack Overflow用户

发布于 2016-05-30 00:36:07

import data调用放入计算函数中。

Dispy将要调用的函数与其参数一起传递给新进程。新流程没有导入数据。这就是为什么在函数定义中添加import data应该可以解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2018-08-05 16:09:48

代码语言:javascript
复制
JobCluster(compute, depends=[data])

指定comoute函数取决于您需要的任何模块。

票数 0
EN

Stack Overflow用户

发布于 2020-01-27 12:26:45

如果它是一个你知道所有机器都安装了它的模块,你可以只导入数据,在计算函数中连接。

我知道它不是很优雅,但对我来说很有效,有两个选择:

删除main函数并将其放入if main块中,因为它很可能在函数进入集群时执行。在一个大函数中定义所有模块数据,并将其传递给集群,这是一种非常简单但功能强大的方法。

代码语言:javascript
复制
import dispy
import sys


def compute(num):
    def data_func1(json_):
        #do something to json_
        return json_
    def data_func2(json_):
        #do something diff
        return json_
    #some code that call data and connection methods, and generate a solution
    return solution

if __name__ == "__main__":
    cluster = dispy.JobCluster(compute)
    jobs = []

    for i in range(10)
        job = cluster.submit(i)
        job.id = i # optionally associate an ID to job (if needed later)
        jobs.append(job)

    for job in jobs:
        job()
        print "Result = " + str(job.result)
        print "Exception = " + str(job.exception)

或者在脚本中定义所有函数并根据创建作业集群时的情况传递所有函数,如下所示

代码语言:javascript
复制
import dispy
import sys

def data_func1(json_):
    #do something to json_
    return json_
def data_func2(json_):
    #do something diff
    return json_

class DataClass:
    pass

def compute(num):

    #some code that call data and connection methods, and generate a solution
    return solution

if __name__ == "__main__":
    cluster = dispy.JobCluster(compute, depends=[data_func1,
                                                 data_func2,
                                                 DataClass])
    jobs = []

    for i in range(10)
        job = cluster.submit(i)
        job.id = i # optionally associate an ID to job (if needed later)
        jobs.append(job)

    for job in jobs:
        job()
        print "Result = " + str(job.result)
        print "Exception = " + str(job.exception)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37511799

复制
相关文章

相似问题

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