2016-05-29 141 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