2016-04-28 136 views
1

我想在QuTiP中运行一些代码,但是当我与parfor并行运行一个函数时出现错误。与QuTiP并行的蒙特卡洛求解器

results= parfor(func2, range(len(delta))) 

错误:

AssertionError 
    Traceback (most recent call last) 
<ipython-input-206-6c2ffcb32b4f> in <module>() 
----> 1 results= parfor(func2, range(len(delta))) 

/usr/lib/python2.7/dist-packages/qutip/parallel.pyc in parfor(func, *args, **kwargs) 
    119  try: 
    120   map_args = ((func, v, os.getpid()) for v in var) 
--> 121   par_return = list(pool.map(task_func, map_args)) 
    122 
    123   pool.terminate() 

/usr/lib/python2.7/multiprocessing/pool.py in map(self, func, iterable, chunksize) 
    249   ''' 
    250   assert self._state == RUN 
--> 251   return self.map_async(func, iterable, chunksize).get() 
    252 
    253  def imap(self, func, iterable, chunksize=1): 

/usr/lib/python2.7/multiprocessing/pool.py in get(self, timeout) 
    556    return self._value 
    557   else: 
--> 558    raise self._value 
    559 
    560  def _set(self, i, obj): 

AssertionError: daemonic processes are not allowed to have children 

这里是我的代码:

def func2(x): 
    def H1_coeff(t,args): 
     return exp(-((t-4)/2.0) ** 2) 
    H0 = np.pi*w * a.dag() *a 
    Hi= delta[x]*(a.dag()) 

    H = [H0, [Hi,H1_coeff]] 
    result = mesolve(H, psi0, tlist, c_ops, []) 
    numer=expect(n,result.states) 

    print delta[x], "done" 
    return numer 

有谁知道什么是错在这里吗?

+0

最好让您的问题尽可能接近您问题的顶部。 – Laurel

回答

0

我认为你需要在func2之外移动H1_coeff的定义。