2014-02-26 22 views
0

首先,對所有代碼抱歉。我很難制定一個具體的問題。我已經修好了一段時間,只是無法讓它工作。該錯誤消息不是很有幫助。我將不勝感激一點幫助。將函數參數間隔分解爲單獨部分時出錯。並行Python

爲了加速計算,我想對函數'EMatCreatorrx(umin,umax,vmin,vmax,stepsize,pstep,alphamax,A,rot):'的三個實例並行執行不同的參數範圍。

umin,umax和vmin,vmax分別定義了要在u和v方向分別計算的值的範圍。我想通過將u範圍分成三個較小的範圍來劃分函數。

我已經證明了我的拼接代碼的功能分成三個獨立的部分,然後通過運行正確地重新加入工作如下:

import pp 
import sys 

import numpy as N 
import scipy as sp 
from scipy import integrate as Int 
from scipy import special as S 
import math 

cos=sp.cos 
sin=sp.sin 
exp=sp.exp 
sqrt=sp.sqrt 
j=S.jn 
pi=N.pi 
floor=N.floor 

def EMatCreatorrx(umin,umax,vmin,vmax,stepsize,pstep,alphamax,A,rot): #pstep needs to be pi/n for n=0,1,2,3,... This is so there will be an odd number of samples when calculating the PSF. This is necessary to increase the accuracy of Simpson's method. 
    mnum=N.int(((umax-umin)/stepsize)+1) 
    nnum=N.int(((vmax-vmin)/stepsize)+1) 
    pnum=N.int((2*pi/pstep)+1) 
    gridshape=(mnum,nnum,pnum) 
    I0=N.zeros(gridshape,dtype=complex) 
    I1=N.zeros(gridshape,dtype=complex) 
    I2=N.zeros(gridshape,dtype=complex) 
    E01=N.zeros(gridshape,dtype=complex) 
    E02=N.zeros(gridshape,dtype=complex) 
    E03=N.zeros(gridshape,dtype=complex) 
    for m,u in enumerate(N.linspace(umin,umax,num=mnum)): 
     for n,v in enumerate(N.linspace(vmin,vmax,num=nnum)): 
      for i,p in enumerate(N.linspace(0,2*pi,num=pnum)):    
       vp = sqrt((v*cos(p))**2 + (v*sin(p)*cos(rot)-u*sin(rot))**2) 
       up = (v*cos(p)*sin(rot) + u*cos(rot)) 
       pp= N.arctan2(v*sin(p)*cos(rot) - u*sin(rot), v*cos(p)) 
       I0real=lambda theta: N.real((sqrt(cos(theta))*sin(theta))*(1+cos(theta))* (j(0,vp*sin(theta)/sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I0imaginary=lambda theta: N.imag((sqrt(cos(theta))*sin(theta))*(1+cos(theta))*(j(0,vp*sin(theta)/sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I0real_integral= Int.quad(I0real, 0, alphamax) 
       I0imag_integral= Int.quad(I0imaginary, 0, alphamax) 
       I1real=lambda theta: N.real(sqrt(cos(theta))*((sin(theta))**2)*j(1,vp*sin(theta)/(sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I1imaginary=lambda theta: N.imag(sqrt(cos(theta))*((sin(theta))**2)*j(1,vp*sin(theta)/(sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I1real_integral= Int.quad(I1real, 0, alphamax) 
       I1imag_integral= Int.quad(I1imaginary, 0, alphamax) 
       I2real=lambda theta: N.real((sqrt(cos(theta))*sin(theta))*(1-cos(theta))*(j(2,vp*sin(theta)/sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I2imaginary=lambda theta: N.imag((sqrt(cos(theta))*sin(theta))*(1-cos(theta))*(j(2,vp*sin(theta)/sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I2real_integral= Int.quad(I2real, 0, alphamax) 
       I2imag_integral= Int.quad(I2imaginary, 0, alphamax) 
       I0.real[m,n,i]=I0real_integral[0] 
       I0.imag[m,n,i]=I0imag_integral[0] 
       I1.real[m,n,i]=I1real_integral[0] 
       I1.imag[m,n,i]=I1imag_integral[0] 
       I2.real[m,n,i]=I2real_integral[0] 
       I2.imag[m,n,i]=I2imag_integral[0] 
       E01[m,n,i]=-A*(1j*(I0[m,n,i]+I2[m,n,i]*cos(2*pp))) 
       E02[m,n,i]=-A*(cos(rot)*1j*I2[m,n,i]*sin(2*pp) - sin(rot)*2*I1[m,n,i]*cos(pp)) 
       E03[m,n,i]=-A*(sin(rot)*1j*I2[m,n,i]*sin(2*pp) + cos(rot)*2*I1[m,n,i]*cos(pp)) 
    return E01,E02,E03,pstep 


#EMatCreatorrx(umin,umax,vmin,vmax,stepsize,pstep,alphamax,A,rot): #Enter parameters below in tuple "params." 

params=-2,2,-2,2,.2,N.pi/10,1,1,0 
############################################################################################################## 

mnum=N.int(((params[1]-params[0])/params[4])+1) 
nnum=N.int(((params[3]-params[2])/params[4])+1) 
pnum=N.int((2*N.pi/params[5])+1) 
phold=N.zeros((mnum,nnum,pnum), dtype=complex),N.zeros((mnum,nnum,pnum), dtype=complex),N.zeros((mnum,nnum,pnum), dtype=complex), params[5] 

uindarr = [(m, u) for m,u in enumerate(N.linspace(params[0],params[1],num=mnum))] 

ind_end1=floor(len(uindarr)/3) 
spa_end1=uindarr[int(ind_end1)][1] 

ind_beg2=ind_end1+1 
spa_beg2=uindarr[int(ind_beg2)][1] 
ind_end2=2*floor(len(uindarr)/3) 
spa_end2=uindarr[int(ind_end2)][1] 

ind_beg3=ind_end2+1 
spa_beg3=uindarr[int(ind_beg3)][1] 

job1 = EMatCreatorrx(params[0],spa_end1,params[2],params[3],params[4],params[5],params[6],params[7],params[8]) 
job2 = EMatCreatorrx(spa_beg2,spa_end2,params[2],params[3],params[4],params[5],params[6],params[7],params[8]) 
job3 = EMatCreatorrx(spa_beg3,params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8]) 

phold[0][:ind_end1+1,:,:]=job1[0] 
phold[0][ind_beg2:ind_end2+1,:,:]=job2[0] 
phold[0][ind_beg3:,:,:]=job3[0] 

phold[1][:ind_end1+1,:,:]=job1[1] 
phold[1][ind_beg2:ind_end2+1,:,:]=job2[1] 
phold[1][ind_beg3:,:,:]=job3[1] 

phold[2][:ind_end1+1,:,:]=job1[2] 
phold[2][ind_beg2:ind_end2+1,:,:]=job2[2] 
phold[2][ind_beg3:,:,:]=job3[2] 

後這個工作,我試圖以計算實現並行蟒蛇三片並聯使用此代碼:

import pp 
import sys 

import numpy as N 
import scipy as sp 
from scipy import integrate as Int 
from scipy import special as S 
import math 

cos=sp.cos 
sin=sp.sin 
exp=sp.exp 
sqrt=sp.sqrt 
j=S.jn 
pi=sp.pi 
floor=N.floor 

def EMatCreatorrx(umin,umax,vmin,vmax,stepsize,pstep,alphamax,A,rot): #pstep needs to be pi/n for n=0,1,2,3,... This is so there will be an odd number of samples when calculating the PSF. This is necessary to increase the accuracy of Simpson's method. 
    cos=sp.cos 
    sin=sp.sin 
    exp=sp.exp 
    sqrt=sp.sqrt 
    j=S.jn 
    pi=sp.pi 
    mnum=N.int(((umax-umin)/stepsize)+1) 
    nnum=N.int(((vmax-vmin)/stepsize)+1) 
    pnum=N.int((2*pi/pstep)+1) 
    gridshape=(mnum,nnum,pnum) 
    I0=N.zeros(gridshape,dtype=complex) 
    I1=N.zeros(gridshape,dtype=complex) 
    I2=N.zeros(gridshape,dtype=complex) 
    E01=N.zeros(gridshape,dtype=complex) 
    E02=N.zeros(gridshape,dtype=complex) 
    E03=N.zeros(gridshape,dtype=complex) 
    for m,u in enumerate(N.linspace(umin,umax,num=mnum)): 
     for n,v in enumerate(N.linspace(vmin,vmax,num=nnum)): 
      for i,p in enumerate(N.linspace(0,2*pi,num=pnum)):    
       vp = sqrt((v*cos(p))**2 + (v*sin(p)*cos(rot)-u*sin(rot))**2) 
       up = (v*cos(p)*sin(rot) + u*cos(rot)) 
       pp= N.arctan2(v*sin(p)*cos(rot) - u*sin(rot), v*cos(p)) 
       I0real=lambda theta: N.real((sqrt(cos(theta))*sin(theta))*(1+cos(theta))*(j(0,vp*sin(theta)/sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I0imaginary=lambda theta: N.imag((sqrt(cos(theta))*sin(theta))*(1+cos(theta))*(j(0,vp*sin(theta)/sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I0real_integral= Int.quad(I0real, 0, alphamax) 
       I0imag_integral= Int.quad(I0imaginary, 0, alphamax) 
       I1real=lambda theta: N.real(sqrt(cos(theta))*((sin(theta))**2)*j(1,vp*sin(theta)/(sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I1imaginary=lambda theta: N.imag(sqrt(cos(theta))*((sin(theta))**2)*j(1,vp*sin(theta)/(sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I1real_integral= Int.quad(I1real, 0, alphamax) 
       I1imag_integral= Int.quad(I1imaginary, 0, alphamax) 
       I2real=lambda theta: N.real((sqrt(cos(theta))*sin(theta))*(1-cos(theta))*(j(2,vp*sin(theta)/sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I2imaginary=lambda theta: N.imag((sqrt(cos(theta))*sin(theta))*(1-cos(theta))*(j(2,vp*sin(theta)/sin(alphamax)))*exp((1j*up*cos(theta))/((sin(alphamax))**2))) 
       I2real_integral= Int.quad(I2real, 0, alphamax) 
       I2imag_integral= Int.quad(I2imaginary, 0, alphamax) 
       I0.real[m,n,i]=I0real_integral[0] 
       I0.imag[m,n,i]=I0imag_integral[0] 
       I1.real[m,n,i]=I1real_integral[0] 
       I1.imag[m,n,i]=I1imag_integral[0] 
       I2.real[m,n,i]=I2real_integral[0] 
       I2.imag[m,n,i]=I2imag_integral[0] 
       E01[m,n,i]=-A*(1j*(I0[m,n,i]+I2[m,n,i]*cos(2*pp))) 
       E02[m,n,i]=-A*(cos(rot)*1j*I2[m,n,i]*sin(2*pp) - sin(rot)*2*I1[m,n,i]*cos(pp)) 
       E03[m,n,i]=-A*(sin(rot)*1j*I2[m,n,i]*sin(2*pp) + cos(rot)*2*I1[m,n,i]*cos(pp)) 
    return E01,E02,E03,pstep 






#EMatCreatorrx(umin,umax,vmin,vmax,stepsize,pstep,alphamax,A,rot): #Enter parameters below in tuple "params." 

params=-2,2,-2,2,.2,N.pi/10,1,1,0 
############################################################################################################## 

mnum=N.int(((params[1]-params[0])/params[4])+1) 
nnum=N.int(((params[3]-params[2])/params[4])+1) 
pnum=N.int((2*N.pi/params[5])+1) 
phold=N.zeros((mnum,nnum,pnum), dtype=complex),N.zeros((mnum,nnum,pnum), dtype=complex),N.zeros((mnum,nnum,pnum), dtype=complex), params[5] 

uindarr = [(m, u) for m,u in enumerate(N.linspace(params[0],params[1],num=mnum))] 

ind_end1=floor(len(uindarr)/3) 
spa_end1=uindarr[int(ind_end1)][1] 

ind_beg2=ind_end1+1 
spa_beg2=uindarr[int(ind_beg2)][1] 
ind_end2=2*floor(len(uindarr)/3) 
spa_end2=uindarr[int(ind_end2)][1] 

ind_beg3=ind_end2+1 
spa_beg3=uindarr[int(ind_beg3)][1] 

ppservers =() 
job_server = pp.Server() 
fn = pp.Template(job_server, EMatCreatorrx,(), ("scipy as sp", "numpy as N", "scipy.special as S", "scipy.integrate as Int",)) 
job1 = fn.submit(params[0],spa_end1,params[2],params[3],params[4],params[5],params[6],params[7],params[8]) 
job2 = fn.submit(spa_beg2,spa_end2,params[2],params[3],params[4],params[5],params[6],params[7],params[8]) 
job3 = fn.submit(spa_beg3,params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8]) 

phold[0][:ind_end1+1,:,:]=job1[0] 
phold[0][ind_beg2:ind_end2+1,:,:]=job2[0] 
phold[0][ind_beg3:,:,:]=job3[0] 

phold[1][:ind_end1+1,:,:]=job1[1] 
phold[1][ind_beg2:ind_end2+1,:,:]=job2[1] 
phold[1][ind_beg3:,:,:]=job3[1] 

phold[2][:ind_end1+1,:,:]=job1[2] 
phold[2][ind_beg2:ind_end2+1,:,:]=job2[2] 
phold[2][ind_beg3:,:,:]=job3[2] 


print "computation complete" 

當我試圖運行上面的代碼,我得到的文件錯誤的以下終結:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Users\tph89\Desktop\Python Path\parallel python\parallel2.py", line 104, in <module> 
    job1 = fn.submit((params[0],spa_end1,params[2],params[3],params[4],params[5],params[6],params[7],params[8])) 
    File "C:\Users\tph89\Desktop\Python Path\parallel python\pp.py", line 270, in submit 
    self.group, self.globals) 
    File "C:\Users\tph89\Desktop\Python Path\parallel python\pp.py", line 459, in submit 
    sfunc = self.__dumpsfunc((func,) + depfuncs, modules) 
    File "C:\Users\tph89\Desktop\Python Path\parallel python\pp.py", line 637, in __dumpsfunc 
    sources = [self.__get_source(func) for func in funcs] 
    File "C:\Users\tph89\Desktop\Python Path\parallel python\pp.py", line 704, in __get_source 
    sourcelines = inspect.getsourcelines(func)[0] 
    File "C:\Users\tph89\Python27\lib\inspect.py", line 693, in getsourcelines 
    else: return getblock(lines[lnum:]), lnum + 1 
    File "C:\Users\tph89\Python27\lib\inspect.py", line 677, in getblock 
    tokenize.tokenize(iter(lines).next, blockfinder.tokeneater) 
    File "C:\Users\tph89\Python27\lib\tokenize.py", line 169, in tokenize 
    tokenize_loop(readline, tokeneater) 
    File "C:\Users\tph89\Python27\lib\tokenize.py", line 175, in tokenize_loop 
    for token_info in generate_tokens(readline): 
    File "C:\Users\tph89\Python27\lib\tokenize.py", line 296, in generate_tokens 
    raise TokenError, ("EOF in multi-line string", strstart) 
tokenize.TokenError: ('EOF in multi-line string', (2, 0)) 

在這一點上,我有點失落。你有沒有遇到過這個錯誤?如果是這樣,那麼問題是什麼?任何輸入是不勝感激。謝謝!

+0

這裏有太多的代碼。 – tacaswell

+0

而這個錯誤通常意味着你有一個未關閉的''' – tacaswell

回答

1

我也有這個問題以及使用並行Python,也是由於一個標記錯誤。在我的例子中,我的一個helper函數有雙縮進(八個空格,由於複製粘貼現象,而函數聲明位於零空格的正確縮進級別)--Spyder的主要解釋器剛剛處理了這個,但標記化明顯不。

在OP的情況下:基於上面格式化代碼的方式,並基於tokenize頂部的註釋,錯誤可能是因爲空行上沒有空白;這將返回「」,其中評論說是作爲EOF處理。

相關問題