异步屈服并不起作用。使用DHC chrome客户端插件和ajax代码进行测试

时间:2014-10-27 07:36:02

标签: python python-2.7 bottle gevent

我有一个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))

然后在客户端一切正常。

0 个答案:

没有答案