заставить агента faust ждать окончания работы других агентов - PullRequest
1 голос
/ 10 января 2020

Есть ли способ заставить агент faust работать, когда некоторые другие агенты заканчивают работу sh? Например,

       Agent1
       +
       |
       |
       |
Agent2 +------------->Agent_final
       |
       |
       |
       +
       Agent3

Agent_final должно начаться, когда все Agent1,Agent2,Agent3 fini sh. И Agent_final должен иметь доступ ко всем выводам 3 агентов. Не нашел такого распространенного подхода в документах.

1 Ответ

0 голосов
/ 10 января 2020

Вы могли бы сделать пару вещей. Вы можете сделать его более линейным:

A1 -> A2 -> A3 -> AF

Или вы можете сделать так, чтобы AF сделал соединение. Я сделал так:

  • чтобы все родительские агенты записывали в одну и ту же топи c, поэтому в этом случае (A1,A2,A3) будет писать в agent_final's_topic.
  • agent_final содержит таблицу, которая выглядит как {id: {A1: x, A2: y, A3: z}}. x, y и z имеют значение None или независимо от того, что генерируют родительские агенты.
  • Когда agent_final читает сообщение, он проверяет таблицу на наличие идентификатора, добавляет значение к правильному поле (соответствует агенту, от которого пришло сообщение)
  • Если все 3 поля не равны None, то все три участвующих Агента завершены, так что теперь вы можете делать все, что предполагалось final_agent.
  • Если есть пропущенные поля, вы можете сохранить обновленный dict обратно в таблицу, а затем перейти к следующему сообщению, ничего не делая.

Бесстыдный плагин:

Я создал библиотеку для такой обработки ( github , pypi ). Отправьте все сообщения о зависимостях в одну топи c, напишите ключ, функцию слияния и достаточности и следуйте инструкциям в README, чтобы использовать ее для блокировки обработки, пока несколько вышестоящих агентов не сделают свое дело.

...