Django runserver зависает во время ожидания на внешнем веб-сервисе, который запрашивает сервер - PullRequest
1 голос
/ 22 февраля 2012

У меня есть первое представление в Django, которое вызывает сторонний веб-сервис для преобразования HTML-страницы с заданным URI в PDF. (pdfcrowd, чтобы быть конкретным). URI, который я предоставляю веб-службе, соответствует второму представлению Django. Поэтому, когда я вызываю сторонний веб-сервис из моего первого просмотра, веб-сервис отправляет на мой сервер запрос на страницу по URL-адресу (соответствует второму виду), чтобы преобразовать полученный HTML-код в PDF и вернуть байты, представляющие файл PDF для первого просмотра. (См. Код ниже)

Однако Django runserver зацикливается на этом, и я предполагаю, что он не выполняет параллельное выполнение и не может выполнить один запрос (соответствующий второму представлению), пока первое представление все еще выполняется и ожидает. Я также предполагаю, что это будет работать нормально на моем производственном сервере, на котором работает Gunicorn, который должен нормально обрабатывать параллельные запросы.

Мне интересно, есть ли хороший способ, позволяющий использовать этот код с runserver на моих машинах разработки.

class PdfMenuView(View):
    def get(self, request, *args, **kwargs):
        # I actually reverse a urlconf to get the full url, but show this as hardcoded for simplicity
        prePdfHtmlUrl = "http://1.2.3.4:8080/url-to-convert/"  # my router forwards 8080 to my machine to enable testing with external web services.  
        try:
            # create an API client instance
            client = pdfcrowd.Client(settings.PDFCROWD_USERNAME, settings.PDFCROWD_KEY)

            # convert a web page and store the generated PDF to a string
            pdf_string = client.convertURI( prePdfHtmlUrl)  # this is where it gets hung up, since the client will cause the webserver to query the URI I provide it in order to get the page to convert, but this view is still tying up the runserver execution so the second view can't execute
        except:    
            . . . 

1 Ответ

3 голосов
/ 22 февраля 2012

django-devserver обеспечивает замену многопоточной команды runserver, поддерживая параллельное выполнение.

Возможно, runserver_plus , предоставленный django-extensions isтоже - он работает на werkzeug и включает в себя удивительную страницу трассировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...