2016-05-29 142 views
1

我正在使用一个程序,并行执行与dispy。 我使用dispy来创建任务,然后将其分发到不同的CPU来执行。导入python作业模块

我有standar图书馆,并由我图书馆(数据和连接)开发。

的代码是这样的:

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() 

`

的问题是,我需要的,如果用数据,并在主连接的工作DEF它工作一切正常,也如果我叫计算为一个函数,而不是使用dispy库。 但是,当我这样工作,并在计算过程中调用数据函数时,它会抛出异常,数据未定义并且打印异常无。

任何帮助?文档建议使用设置,但我无法弄清楚它是如何工作的。

+0

你可以添加堆栈跟踪你正在得到的例外吗?在全局 文件 “dispynode.py”,线路186,在_dispy_job_func __dispy_job_name)() 文件 “”,1号线,在 文件 “”,行: – saq7

+0

'异常=回溯(最近通话最后一个) 47,在计算 NameError:未定义全局名称'数据' – A77ak

回答

0

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

Dispy发送函数以调用它的参数到新进程。新进程没有导入数据。这就是为什么在函数定义中添加import data应该解决这个问题。

+0

如果我这样做,导入的第二个将返回一个错误。 ImportError:没有名为connection的模块 – A77ak

+0

那么你需要在计算功能中加入'import connection'。这个想法是,运行计算所需的所有模块必须在计算内部导入 – saq7

+0

它在计算函数 – A77ak