Использование web.py как не блокирующего http-сервера

изучая некоторое базовое программирование с помощью python, я нашел web.py. я застрял с глупой проблемой:

Я написал простое консольное приложение с основным контуром, который обрабатывает элементы из очереди в отдельных потоках. моя цель - использовать web.py для добавления элементы в мою очередь и статус отчета очереди через веб-запрос. я получил это работает как модуль, но не может интегрировать его в основное приложение. моя проблема в том, что когда я запускаю http-сервер с app.run(), он блокирует мой основной цикл. также попытался запустить его с thread.start_new_thread, но он все еще блоки. есть простой способ запустить интегрированный http-сервер web.py в в моем приложении.

в вероятном случае, что я жертва фундаментального недоразумения, любая попытка разъяснить мою ошибку в рассуждении помогите;.) (пожалуйста, медведь со мной, я новичок:-)

Ответы

Ответ 1

Я нашел рабочее решение. В отдельном модуле я создаю свой веб-сервер:

import web
import threading
class MyWebserver(threading.Thread):

    def run (self):
        urls = ('/', 'MyWebserver')
        app = web.application(urls, globals())
        app.run()

    def POST ...

В основной программе я просто вызываю

MyWebserver().start()

и чем продолжать то, что я хочу, имея веб-сервер, работающий в фоновом режиме.

Ответ 2

Не было бы проще переписать код основного цикла как функцию, которую вы вызываете снова и снова, а затем вызывать это из функции, которую вы передаете в runsimple...

Это гарантировало не полностью удовлетворить ваши требования, но если вы в спешке, это может быть проще всего.

Ответ 3

или просто использовать Tornado, неблокирующий веб-сервер для Python с API, похожим на webpy - http://www.tornadoweb.org/

Ответ 4

Я также недавно использовал Beanstalkd для очереди задач, которые будут выполняться в отдельном потоке. Ваш обработчик web.py просто переносит задание в трубу, и его выполняет полностью отдельный script. У вас может быть любое их количество, и вы получаете преимущества расширенного управления очередью и т.д.