繁体   English   中英

并行流程

[英]Parallel processes

我很好奇,是否有可能运行一个将函数作为并行子进程调用的python脚本。 我不确定我是否正确使用了这些术语,所以这是一个由bash脚本构成的概念脚本,它可以满足我的要求。

import Zfunctions as Z
reload(Z)

def Parallel():
    statements
    calls to other functions in a general function file Z

#--------------
if '__name__' == '__main__':
    # Running this script in a linux cluster with 8 processing node available
    Parallel() &  #1st process sent to 1st processing node
    Parallell() & #2nd process sent to 2nd node
    .
    .
    .
    Parallell() & #8th process sent to 8th node
    wait

现在,我知道这里的&符号和“等待”是错误的,但是在bash中,这是将进程发送到后台并等待这些进程完成的方法。 现在,我的问题希望更加清楚:这可以在python中完成吗?

任何帮助表示赞赏。

/米

我得到了一些很好的帮助。 我在上面的问题中测试了此修改,该问题试图运行60个作业,这些作业将处理大量数据并将结果写入磁盘。 所有这些都在一个Python文件中,该文件结合了两个for循环和一系列内部函数调用。 脚本失败,并在下面找到错误输出:

import multiprocessing

def Parallel(m,w,PROCESSES):                                                             
plist = {}                                                                           
plist['timespan'] = '2007-2008'                                                      
print 'Creating pool with %d processes\n' % PROCESSES                                
pool = multiprocessing.Pool(PROCESSES)                                               
print 'pool = %s' % pool                                                             

TASKS = [(LRCE,(plist,m,w)),(SRCE,(plist,m,w)),(ALBEDO,(plist,m,w)),                 
         (SW,(plist,m,w)),(RR,(plist,m,w)),(OLR,(plist,m,w)),(TRMM,(plist,w)),       
         (IWP,(plist,m,w)),(RH,(plist,'uth',m,w)),(RH,(plist,200,m,w)),              
         (RH,(plist,400,m,w)),(IWC,(plist,200,m,w)),(IWC,(plist,400,m,w)),           
         (CC,(plist,200,m,w)),(CC,(plist,400,m,w))]                                                                                                        

results = [pool.apply_async(calculate,t) for t in TASKS]                             
print 'Ordered results using pool.apply_async():'                                    
for r in results:                                                                    
    print '\t', r.get()                                                              

#-----------------------------------------------------------------------------------     
if __name__ == '__main__':                                                               
PROCESSES = 8                                                                        
for w in np.arange(2):                                                               
    for m in np.arange(2):                                                           
        Parallel(m,w,PROCESSES) 
来自群集的####错误消息

线程Thread-3中的异常:追溯(最近一次调用是最近的):在bootstrap_inner self.run(中 ,文件“ /software/apps/python/2.7.2-smhi1/lib/python2.7/threading.py”,第552行) )在运行self .__ target(* self .__ args,** self .__ kwargs)文件“ /software/apps/python/2.7.2-smhi1/lib/python2.7/threading.py”,第505行,文件“ / software / apps / python / 2.7.2-smhi1 / lib / python2.7 / multiprocessing / pool.py“,第313行,在_handle_tasks中放置(任务)PicklingError:无法腌制:属性查找__builtin .function失败

您可能希望研究多处理 -您的代码可以按以下步骤完成:

import multiprocessing

def Parallel(junk):    
    #...snip...

if __name__ == "__main__":
   p = multiprocessing.Pool(8)

   results = p.map(Parallel, range(8))

一个警告:不要在交互式解释器中尝试此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM