Nano Hash - криптовалюты, майнинг, программирование

Данные обработки Tornado в обработчике запросов после возврата

В обработчике запросов торнадо, если мне нужно вызвать функцию foo(), которая не влияет на то, что возвращается пользователю, имеет смысл сначала вернуть результат пользователю, а затем вызвать foo(). Можно ли это легко сделать в торнадо (или в каком-нибудь стороннем пакете)?

11.03.2011

Ответы:


1

Нет, это не "просто" из коробки. То, что вы имеете в виду, это «выстрелил и забыл». Даже если вы используете пул потоков для обработки запроса, этот пул потоков будет принадлежать основному процессу Python, принадлежащему Tornado.

Лучшим подходом является очередь сообщений. Что-то вроде Моркови. Таким образом, предположим, что у вас есть страница, на которой пользователи могут выполнить запуск, чтобы начать генерировать ОГРОМНЫЙ отчет, вы можете запустить его в очереди сообщений, а затем завершить запрос Tornado, и с помощью некоторой магии AJAX и других трюков (вне возможностей Tornado) вы можете сидеть сложа руки и ждать, пока очередь сообщений завершит свою работу (что технически может происходить на распределенном сервере в другом физическом месте).

24.03.2011
  • Это очень легко; Я добавлю ответ. 08.09.2012

  • 2

    Это очень просто:

    class Handler(tornado.web.RequestHandler):
        def get(self):
            self.write('response')
            self.finish() # Connection is now closed
            foo()
    
    08.09.2012
  • это заблокирует цикл ввода-вывода? 16.12.2012
  • Да, если foo() блокирует ввод-вывод. Нет, если foo() не работает. Эмпирическое правило: если foo() использует IOStream, то он не блокирует. Если он использует сокеты без IOStream, то он блокируется. 16.12.2012
  • Проблема с этим подходом заключается в том, что если у вас есть текущая транзакция БД, которая потребуется для foo(), в тот момент, когда вы вызываете self.finish(), сеанс БД будет испорчен. 03.03.2021

  • 3

    ioloop.add_callback, Tornado выполнит обратный вызов на следующей итерации IOLoop.

    11.03.2011

    4

    предупреждение о плохом совете: вы можете использовать многопроцессорность.

    http://docs.python.org/library/multiprocessing.html

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

    22.04.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..