2015-09-06 6 views
-1

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

... 
@app.route('/wanted_delay_response') 
def delay_response(): 
    def background_work(): 
     # I want to check some flags in the background 
     # this should not block, but it does as I try below 
     pass 
    gevent.spawn(background_work) 
    # the most confusing part comes: 
    return 'This is not what I really want to response' 

, как показано выше, работа в фоновом режиме будет продолжаться в фоновом режиме, но результат я хочу, должна исходить от него.

Однако я понятия не имею, как уведомить сервер о том, как обрабатывать другой запрос, когда работает фоновый рисунок, но с каким-либо результатом.

Или есть ли какой-либо изящный способ отложить текущий запрос и вернуться к ответу, когда фоновая работа заканчивается, в пределах интервала сервер может обрабатывать другие запросы?

ответ

0

HTTP-запросы между клиентом и сервером недолговечны и поэтому не подходят для используемого вами варианта использования. В случае, когда сервер отправляет данные клиенту, когда данные готовы, использование должно использовать технологию push-сервера. Например, вы можете использовать Websockets для реализации соединения между клиентом и сервером.

Однако веб-порты не так просты в управлении, потому что соединения открыты в течение длительного времени. Есть несколько расширений для Flask, которые могут упростить использование веб-узлов. Например, проверьте https://github.com/kennethreitz/flask-sockets.

+0

Благодарим вас за предоставление такого прекрасного решения. Для меня действительно приемлемо, чтобы HTTP-запросы существовали всего лишь короткое мгновение. Модуль Websockets показывает большое преимущество для меня не только для текущей ситуации, с которой я столкнулся, но и для объединения других частей моего сервера. – xete

 Смежные вопросы

  • Нет связанных вопросов^_^