嘿我試着去運行一個簡單的代碼,使用並行的Python並行的Python全局名稱錯誤
import sys, time
import pp
import numpy
x = numpy.arange(-20.0,20.0,0.5)
def function(raw_input):
f = 0
for i in numpy.arange(len(x)):
f+=1
a=raw_input[0]
b=raw_input[1]
c=raw_input[2]
d=raw_input[3]
print len(x)
return (a+b+c+d)+f
# tuple of all parallel python servers to connect with
ppservers =()
#ppservers = ("10.0.0.1",)
if len(sys.argv) > 1:
ncpus = int(sys.argv[1])
# Creates jobserver with ncpus workers
job_server = pp.Server(ncpus, ppservers=ppservers)
else:
# Creates jobserver with automatically detected number of workers
job_server = pp.Server(ppservers=ppservers)
print "Starting pp with", job_server.get_ncpus(), "workers"
start_time = time.time()
# The following submits 4 jobs and then retrieves the results
puts = ([1,2,3,4], [3,2,3,4],[4,2,3,6],[2,3,4,5])
jobs = [(raw_input, job_server.submit(function,(raw_input,),(), ("numpy",))) for raw_input in puts]
for raw_input, job in jobs:
print "Sum of numbers", raw_input, "is", job()
print "Time elapsed: ", time.time() - start_time, "s"
job_server.print_stats()
所以基本上我希望它添加[1,2,3同時增加號碼列表一起,4]同時加入[3,2,3,4],[4,2,3,6],[2,3,4,5]。然後在所有答案中加上x(即80)的長度「f」。 失認沽應該是這樣的:
開始第4名工人
號碼[1,2,3,4]總和爲90
號碼[3,2,3的總和,圖4是92
薩姆編號[4,2,3,6]是95
號碼[2,3,4的點心,5]是94
經過時間:0.394000053406小號
工作執行統計:
工作計數|所有工作的百分比|工作時間總和|每項工作的時間|因爲服務器創造就業機會服務器
4 | 100.00 | 1.4380 | 0.359500 | local
時間流逝0.442999839783
有問題即時是用「功能」之外的X殼回來與全局名稱「X」沒有定義,但如果你把X進入shell將返回完整的x數組。
我很困惑,爲什麼它的清晰定義足以讓我回到「x」當我把它放在shell中,但作業沒有找到x或函數定義之外的其他東西。
感謝您的答覆,我是意識到f將永遠是相同的,我試圖做一個簡單的例子,將函數外部的變量拉入計算中。真正的目標實際上是一個不同的代碼,其中包含類似這樣的內容,並且它具有在每次迭代時都會改變的變量,並且並行作業內部的計算應該追加到也在函數之外的數組中,所以這就是爲什麼我沒有不要把x放在裏面,這可能會起作用,但是如果我可以創建一個數組或者我認爲的參數的列表部分。謝謝您的幫助 – user991926 2012-02-15 13:05:03