Parallel processing SAS并行处理:随后启动k个并行作业,直到完成N个作业

Parallel processing SAS并行处理:随后启动k个并行作业,直到完成N个作业,parallel-processing,sas,Parallel Processing,Sas,可能有一个简单的解决方案,但目前我还不能理解它。也许有人能帮我 因此,我有以下问题: 我总共有NSAS作业要完成。由于我机器上的资源太有限,无法同时启动所有N作业,我只想同时启动sayk=5。每次完成一项工作,我都想开始下一项工作。作业完成的顺序并不重要 目前,我让所有k=5作业在开始下一个5个作业之前完成。 下面是我目前正在做的伪代码: /*The following macro starts k threads*/ %macro parallel_processing(k); option

可能有一个简单的解决方案,但目前我还不能理解它。也许有人能帮我

因此,我有以下问题:

我总共有
N
SAS作业要完成。由于我机器上的资源太有限,无法同时启动所有
N
作业,我只想同时启动say
k=5
。每次完成一项工作,我都想开始下一项工作。作业完成的顺序并不重要

目前,我让所有
k=5
作业在开始下一个5个作业之前完成。 下面是我目前正在做的伪代码:

/*The following macro starts k threads*/
%macro parallel_processing(k);

options fullstimer autosignon=yes sascmd="sas -nonews -threads";

%global thread jj idlist;

/*These are the N ID numbers for the jobs*/
%let idlist = 1 2 3 4 5 ... N;
%let jj = 0;
%do %until(&jj.=N);
    %do thread = 1 %to &k.;
        %let jj = %eval(&thread.+&jj.);
         %syslput thread = &thread;
         %syslput jj = &jj.;
         %syslput idlist = &idlist.;

        rsubmit process=task&thread. wait=no sysrputsync=yes;

          %let id =%scan(%trim(&idlist.),&jj.); 
          /*Do the job*/
          %job(id);

        endrsubmit;
    %end;

    /* HERE IS MY PROBLEM:
       I want to wait for each job separately, and start a new one
       with an increased id. So that constantly k threads are busy.
    */

    /* Wait for all threads to finish */
    waitfor _all_ %do thread = 1 %to &k.;
        task&thread
    %end;

    /* GET RESULTS FROM THREADS */
    %do thread = 1 %to (&k.);
        rget task&thread;
    %end;

    /* SIGNOFF THREADS*/
    %do thread = 1 %to (&k.);
        signoff task&thread;
    %end;
%end;
%mend parallel_processing;

%parallel_processing(k);

也许有人有个好主意,我会很感激的!提前谢谢。

使用
waitforany.
而不是
waitforall.

  • 开始前5项任务,记下哪5项任务处于活动状态
  • 等待其中任何一个任务完成,然后将其从活动任务列表中删除
  • 从队列中启动下一个任务,并将其添加到活动任务列表中
  • 重复步骤2和3,直到队列中没有任务

  • 您可以使用任何方法跟踪当前活动的5个任务。

    使用
    waitfor\u any.
    而不是
    waitfor\u all.

  • 开始前5项任务,记下哪5项任务处于活动状态
  • 等待其中任何一个任务完成,然后将其从活动任务列表中删除
  • 从队列中启动下一个任务,并将其添加到活动任务列表中
  • 重复步骤2和3,直到队列中没有任务

  • 您可以使用任何方法跟踪当前活动的5项任务。

    谢谢您的回答。问题是如何跟踪正在运行的5个任务
    LISTTASK
    将结果打印到日志文件中,如何访问当前正在运行的任务列表?使用您在RSUBMIT语句中使用CMACVAR=选项定义的宏变量检查状态。感谢您的提示!效果很好:谢谢你的回答。问题是如何跟踪正在运行的5个任务
    LISTTASK
    将结果打印到日志文件中,如何访问当前正在运行的任务列表?使用您在RSUBMIT语句中使用CMACVAR=选项定义的宏变量检查状态。感谢您的提示!作品很棒:D