Наша система обратного вызова работала так, что во время запроса, когда вам требовалось больше пользовательского ввода, вы выполняли следующее:
def view(req):
# do checks, maybe get a variable.
bar = req.bar()
def doit():
foo = req.user
do_the_things(foo, bar)
req.confirm(doit, "Are you sure you want to do it")
С этого момента сервер сохранял бы объект функции в словаре с UIDв качестве ключа, который будет отправлен клиенту, где будет показан диалог подтверждения. При нажатии OK другой запрос отправляется в другое представление, которое ищет сохраненный объект функции и запускает его.
Это работает в одном процессе развертывания. Однако при использовании nginx, если пул процессов больше 1, другой процесс получает запрос на подтверждение и, следовательно, не имеет сохраненной функции и не может выполняться.
Мы рассмотрели способы принудительного примененияnginx использует определенный процесс для определенных запросов, но не нашел решения.
Мы также изучили многопроцессорные библиотеки и сельдерей, однако, похоже, нет способа отправить предопределенную функцию в другой процесс.
Может кто-нибудь предложить метод, который позволит нам сохранить функцию для запуска позже, когда запрос на продолжение может поступить из отдельного процесса?