我有一个api代码段:
@app.route("/do_something", method=['POST', 'OPTIONS'])
#CORS is enabled
def initiate_trade():
'''
post json
some Args: *input
'''
if request.method == 'OPTIONS':
yield {}
else:
response.headers['Content-type'] = 'application/json'
data = (request.json)
print data
for dump in json.dumps(function(input)): yield dump
相应的功能是:
def function(*input):
#========= All about processing foo input ==========#
....
#========= All about processing foo input ends ==========#
worker = []
for this in foo_data:
#doing something
for _ in xrange(this):
#doing smthng again
worker.append(gevent.spawn(foo_fi, args))
result = gevent.joinall(worker)
some_dict.update({this: [t.value for t in worker]})
gevent.killall(worker)
worker = []
yield {this:some_dict[this]}
#gevent.sleep(2)
当我运行DHC rest client,没有gevent.sleep(2)时,它会给出所有内容,就像同步返回值一样。但是,如果gevent.sleep(2)没有注释,则没有任何回复。 怎么了?
我认为睡眠会导致延迟并且"转储"值将逐个流式传输。
也是我没有javascript的人,但我可以阅读一些代码。但是如果没有返回服务器代码,即使ajax也不会收到代码。因此,我假设否定了客户端代码故障的任何可能性,并且与此代码段有关。
请注意,如果我只是将值返回为
,而不是屈服def function(*input):
.
.
return some_dict
在api方面我做了:
return json.dumps(function(input))
然后在客户端一切正常。