Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dispy导入python作业中的模块_Python_Python 2.7_Hpc_Dispy - Fatal编程技术网

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

使用dispy导入python作业中的模块,python,python-2.7,hpc,dispy,Python,Python 2.7,Hpc,Dispy,我正在使用一个与dispy并行执行的程序。 我使用dispy创建任务,然后将其分发到不同的CPU以执行 我有标准库和由我开发的库(数据和连接) 代码如下所示: 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

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

我有标准库和由我开发的库(数据和连接)

代码如下所示:

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中使用数据和连接,我需要一切正常,如果我将compute作为函数调用,而不是使用dispy库。 但当我这样工作时,在计算过程中调用一个数据函数时,它抛出一个异常,数据未定义,而打印异常无


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

导入数据调用放入compute函数中


Dispy将要调用的函数及其参数一起发送到新进程。新进程没有导入数据。这就是为什么在函数定义中添加
import data
可以解决这个问题。

import data
调用放在compute函数中

JobCluster(compute, depends=[data])
Dispy将要调用的函数及其参数一起发送到新进程。新进程没有导入数据。这就是为什么在函数定义中添加
import data
可以解决这个问题

JobCluster(compute, depends=[data])
指定comoute函数取决于所需的模块


指定comoute函数取决于所需的模块

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

我知道它并不优雅,但对我来说很有用,有两种选择:

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

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)
或者在脚本中定义所有函数,并根据需要在作业集群创建时传递所有函数,如

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)

如果它是一个您知道所有机器都安装了它的模块,那么您只需在计算函数中导入数据和连接即可

我知道它并不优雅,但对我来说很有用,有两种选择:

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

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)
或者在脚本中定义所有函数,并根据需要在作业集群创建时传递所有函数,如

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)

你能为你得到的异常添加stacktrace吗?
Exception=Traceback(最近一次调用最后一次):文件“dispynode.py”,第186行,在globals()文件“”,第1行,在文件“”,第47行,在compute NameError中:未定义全局名称“data”
是否可以为正在获取的异常添加stacktrace?
Exception=Traceback(最近一次调用):文件“dispynode.py”,第186行,在globals()文件“”,第1行,文件“”,第47行的“dispy”,在compute NameError中:未定义全局名称“data”
如果我这样做,则导入的第二个用户将返回一个错误。ImportError:没有名为connection的模块,因此您需要将
导入连接
添加到compute函数中。其思想是,运行compute所需的所有模块都必须在compute内部导入。在示例代码中,compute函数中包含导入,而compute函数中不包含导入。它们与compute函数在同一个文件中。你修改过这个吗?如果我这样做,第二个被导入的人会返回一个错误。ImportError:没有名为connection的模块,因此您需要将
导入连接
添加到compute函数中。其思想是,运行compute所需的所有模块都必须在compute内部导入。在示例代码中,compute函数中包含导入,而compute函数中不包含导入。它们与compute函数在同一个文件中。你修改过这个吗?