我正在使用一个与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() `
问题是,如果我需要在main def中处理数据和连接,而且如果我将计算作为一个函数调用,而不是使用dispy库,那么它就可以正常工作。但是当我这样工作的时候,在计算过程中调用一个数据函数,它抛出了一个异常,数据没有定义,打印异常无。
有什么帮助吗?文档建议使用设置,但我不知道它是如何工作的。
发布于 2016-05-30 00:36:07
将import data调用放入计算函数中。
Dispy将要调用的函数与其参数一起传递给新进程。新流程没有导入数据。这就是为什么在函数定义中添加import data应该可以解决这个问题。
发布于 2018-08-05 16:09:48
JobCluster(compute, depends=[data])指定comoute函数取决于您需要的任何模块。
发布于 2020-01-27 12:26:45
如果它是一个你知道所有机器都安装了它的模块,你可以只导入数据,在计算函数中连接。
我知道它不是很优雅,但对我来说很有效,有两个选择:
删除main函数并将其放入if main块中,因为它很可能在函数进入集群时执行。在一个大函数中定义所有模块数据,并将其传递给集群,这是一种非常简单但功能强大的方法。
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)https://stackoverflow.com/questions/37511799
复制相似问题