Доступ к ответу сервера WSGI с протоколом fastcgi из urllib - PullRequest
0 голосов
/ 13 июня 2011

Я создаю приложение, в котором настроен веб-сервер, работающий на fast-cgi. Этот сервер должен возвращать результаты постепенно.

Я хочу запросить этот сервер с другого сервера, работающего на python, и я делаю запрос urllib с этого сервера на wsgi-сервер fcgi-protocol.

Теперь происходит то, что я могу получать инкрементные результаты при запросе fcgi-сервера, который отображается в браузере, но я не могу получить инкрементальный результат при запросе от urllib. Вместо этого я получаю все результаты сразу после завершения обработки всех результатов на fcgi-сервере.

fcgi сервер, server.py

from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server
import re
import time
import random
# A relatively simple WSGI application. It's going to print out the
# environment dictionary after being updated by setup_testing_defaults

port = 8011

def process(query):
    r = re.compile("\s")
    query = "".join(r.split(query))
    params = query.split("&")
    rdict = {}
    for param in params:
        [key, value] = param.split("=")
        rdict[key] = value
    return rdict

def simple_app(environ, start_response):
    setup_testing_defaults(environ)
    query = environ['QUERY_STRING']
    print query
    start_response('200 OK', [('Content-Type', 'text/plain')])
    ret = ["%s: %s\n" % (key, value) for key, value in process(query).iteritems()]
    print ret
    for item in ret:
        yield item
        time.sleep(2)

httpd = make_server('127.0.0.1', port, simple_app)
print "Serving on port %s...\nQuit by Ctrl+C." % (port)
httpd.serve_forever()

Я запускаю его по python server.py и запрашиваю как

http://127.0.0.1:8011/a.fcgi?a=b&b=x&q=p&r=b&l=u&x=h

доступ к urllib, код Python.

import urllib, urllib2
url = 'http://127.0.0.1:8011/a.fcgi?a=b&b=x&q=p&r=b&l=u&x=h&p=i&j=p'
request_object = urllib2.Request(url)
response = urllib2.urlopen(request_object)
for item in response:
    print item

Более того, когда я пытаюсь изменить вызов start_response с помощью чего-либо, кроме text / plain на text / html, text / json, я прекращаю получать дополнительные результаты и в браузере.

...