Использование web.py в качестве неблокирующего http-сервера - PullRequest
14 голосов
/ 01 февраля 2009

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

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

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

Ответы [ 4 ]

6 голосов
/ 16 октября 2010

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

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

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

    def POST ...

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

MyWebserver().start()

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

1 голос
/ 09 декабря 2009

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

1 голос
/ 02 февраля 2009

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

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

0 голосов
/ 08 декабря 2010

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

...