Я создаю приложение, в котором настроен веб-сервер, работающий на 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, я прекращаю получать дополнительные результаты и в браузере.