Dynami c NSubprocess - запустить дополнительный подпроцесс * после запуска * NSuprocess - PullRequest
0 голосов
/ 27 января 2020

Мы знаем, что подпроцесс должен быть запущен для n элементов, когда задача активирована, однако во время жизни задачи NSubprocess могут быть найдены дополнительные элементы.

Допустим, у нас есть Order и OrderItem. Когда клиент отправляет заказ и поток попадает в задачу fulfill_orderitems (NSubprocess - FulfillOrderItem flow), мы запускаем подпроцесс для каждой позиции заказа.

Однако в течение срока действия этого fulfill_orderitems Задание клиент может связаться с нами, чтобы добавить дополнительный пункт к заказу. На этом этапе мы вынуждены создать новый Order процесс, который немного устарел; тогда как если бы мы могли просто инициировать новый подпроцесс FulfillOrderItem, то все было бы намного проще.

Очевидно, что после выполнения fulfill_orderitems и после этого клиент звонит, чтобы добавить дополнительный элемент, нам пришлось бы либо свернуть вернуться (непрактично) или создать новый Order процесс.

Это всего лишь простой пример, но, вообще говоря, такое поведение весьма полезно. Можно утверждать, что должен быть основной функциональностью NSubprocess (ie. Чтобы иметь возможность добавить дополнительный подпроцесс n+1 в течение времени жизни задачи). Как можно go сделать это?

Нам нужно обработать 2 вещи (из того, что я вижу):

  1. Функция, которая запускает этот дополнительный процесс. Из того, что я понимаю, это может быть так просто:
    @Activation.status.transition(source=STATUS.STARTED)
    def start_subprocess(self, item):
        self.flow_task.subflow_task.run(self.task, item)

Представление, в котором item отправляется через форму. В качестве альтернативы, отправьте его напрямую через код. С этим битом у меня возникают проблемы. Это должно быть относительно просто, потому что это очень похоже на то, что делает StartSubprocess ... (но нам нужно вызвать вышеупомянутое start_subprocess(item)?) Однако меня больше интересует возможность прямого вызова метода (например, через DRF).
...