Как использовать rsubmit в SAS для запуска процесса в фоновом режиме, не дожидаясь его завершения - PullRequest
1 голос
/ 06 августа 2020

У меня есть следующая настройка:

Механизм процесса вызывает через rest сохраненный процесс (STP) в SAS. Затем этот сохраненный процесс вызывает другой макрос, который займет ок. один час до завершения. Предполагается, что макрос запускается в фоновом режиме, поэтому STP может просто выполнить потоковую передачу, макрос был успешно запущен. После завершения длинного макроса он использует pro c http, чтобы сообщить механизму процесса, что он завершен.

Моя проблема в том, что когда я пытаюсь запустить макрос, используя rsubmit, STP ожидает завершения макроса, прежде чем он завершит свою работу.

Я использую следующий упрощенный код для решения моей проблемы: STP:

%macro my_stp;
    
  %let rhost=&syshostname. 7551;  
  signon rhost user='***' password='***';
     rsubmit remote=rhost connectwait=no;
       %include "<path to mymacro>"; 
       %mymacro;
     endrsubmit;
  signoff rhost;  
 
%mend;

%my_stp;

Код макроса:

%macro mymacro;
  %put Hello World;
  data _null_;
    call sleep(10,1);
  run;
%mend;

Как я могу убедиться, что STP не ждет завершения макроса? Спасибо за помощь!

1 Ответ

1 голос
/ 07 августа 2020

Добавьте параметр _action=background в свой STP. Например, если вы отправляли его через URL-адрес:

https://mysashost.com/SASStoredProcess/do?_program=/MySTPDir/MySTP&_action=background

Если вы не хотите, чтобы весь STP работал в фоновом режиме, вам нужно будет создать отдельный STP для блок rsubmit, вызовите его через proc http и добавьте к нему параметр action=_background.

%macro my_stp;
    
  proc http url='https://mysashost.com/SASStoredProcess/do_program=/MySTPDir/MyRsubmitProgram&_action=background';
  run;

  <other code>;

%mend;
...