kdb Межпроцессное взаимодействие и принудительное зависание процесса - PullRequest
0 голосов
/ 28 мая 2020

Мне было интересно, есть ли у меня 2 процесса kdb A и B, и я выполняю синхронный вызов из A следующим образом:

h(`function_defined_on_b; args);

A будет зависать, пока не будет выполнена function_defined_on_b. Но что, если function_defined_on_b требует вызова A? Я предполагаю, что тогда он не выполнится, поскольку вызов A будет тайм-аутом из-за того, что A в настоящее время зависает. Я знаю, что выполнение асинхронного вызова от A к B решит эту проблему, но что мне делать в случае, если я не хочу, чтобы A продолжал выполнение кода, пока этот вызов не будет завершен?

В качестве альтернативы есть ли способ остановить A от выполнения любого кода, следующего за синхронным вызовом, но разрешить ему выполнять входящие запросы от других процессов?

Спасибо

1 Ответ

1 голос
/ 29 мая 2020

На самом деле нет способа сделать то, что вы описываете. Возможное решение - иметь какой-то процесс шлюза / агрегатора для выполнения функций, требующих данных в нескольких процессах. Вызов C:

Function to run on C:

aggFunc:{

  responseFromA:handleToA(`func;args);

  //process A is free at this point to process the call from B. 
  //process C can then wait for this response before sending the next part to A
  responseFromB:handleToB(`func;args);

  responseFromA2:handleToA(`func2;args);

  };
...