跳转至

使用 IDL_IDLBridge 实现并行多进程处理

原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/using-idl-idlbridge-to-run-multiple-processes-in-parallel

19303 文章评分:

5.0

使用 IDL_IDLBridge 实现并行多进程处理

作者匿名 2016年1月28日 星期四

我在新闻组注意到一个关于在并行进程中运行多个耗时IDL命令的问题。这是我们定制解决方案团队经常遇到的主题。以下是一个管理多个同时运行进程的简单示例。

请注意在代码中,通常需要为所有桥接进程控制工作目录和搜索路径,以便桥接进程能够找到必要的IDL代码以及所需的任何数据。

pro multi_process

compile_opt idl2, logical_predicate

cd, current=dir

n_proc = 10

tlb = widget_base(title='Initializing',/column, xsize=500, ysize=500)

t = widget_text(tlb, value='Initializing...')

widget_control, tlb, /realize

br = objarr(n_proc)

for i=0, n_proc-1 do begin

br[i] = IDL_IDLbridge()

br[i]->SetVar,'dir',dir

br[i]->Execute,'cd,dir'

br[i]->SetVar,'!path',!path

br[i]->Execute,'wait,50*randomu(seed)',/nowait

endfor

widget_control, tlb, /destroy

tlb = widget_base(title='Processing progress',/column)

t = widget_table(tlb, xsize=2, ysize=n_proc, value=strarr(2,n_proc), $

column_labels=['Process #','Status'], column_width=[250,250])

widget_control, tlb, /realize

; 监控进度

status = replicate(1, n_proc)

table = strarr(2,n_proc)

table[0,*] = strtrim(indgen(n_proc),2)

codes = ['Idle','Executing','Completed','Error','Aborted']

while max(status) gt 0 do begin

wait, 1

for i=0, n_proc-1 do begin

status[i] = br[i]->Status()

endfor

table[1,*] = codes[status]

widget_control, t, set_value=table

endwhile

widget_control, tlb, /destroy

end

此代码示例将显示一个简单的图形用户界面,展示IDL进程的状态。

如果您希望加速某些可在同一系统上单独运行的耗时IDL进程,这是一个极好的方法。在更复杂的情况下,您可能需要考虑使用ENVI Services Engine,因为它提供了更多配置“作业”运行方式的功能,并且支持在多个系统(节点)上分发作业。尽管这里使用了“ENVI”一词,但它同样支持运行纯IDL代码。

利用冥王星图像创建镶嵌图 扩展无人机影像的ENVI分析能力