Python uWSGI、gevent、几个redis调用,以及如果超过90毫秒,如何使post超时

Python uWSGI、gevent、几个redis调用,以及如果超过90毫秒,如何使post超时,python,uwsgi,gevent,Python,Uwsgi,Gevent,下面是我在瓶子里的代码。我将uWSGI与gevent循环一起使用。从请求开始,如果整个请求花费的时间超过90毫秒,我需要返回false。 我不知道如何使用gevent在90毫秒后超时。阻塞代码小于2毫秒。问题在于redis调用。在空载或小负载情况下…整个请求所需时间不超过20毫秒。在严重负载下,redis呼叫可能需要更长的时间…如果需要更长的时间,我需要超时。因此,从第一次redis调用开始,如果返回时间超过90毫秒,则超时。如果小于90毫秒,则计算余数。例如,如果第一次呼叫需要60毫秒,那么第

下面是我在瓶子里的代码。我将uWSGI与gevent循环一起使用。从请求开始,如果整个请求花费的时间超过90毫秒,我需要返回false。 我不知道如何使用gevent在90毫秒后超时。阻塞代码小于2毫秒。问题在于redis调用。在空载或小负载情况下…整个请求所需时间不超过20毫秒。在严重负载下,redis呼叫可能需要更长的时间…如果需要更长的时间,我需要超时。因此,从第一次redis调用开始,如果返回时间超过90毫秒,则超时。如果小于90毫秒,则计算余数。例如,如果第一次呼叫需要60毫秒,那么第二次呼叫需要30毫秒。如果呼叫2花费的时间超过30毫秒,则超时

@post('/test')
def test():

    #START THE TIMER

    #SOME BLOCKING CODE

    #MAKE A REDIS CALL AND SERVICE OTHER REQUESTS
    jt = [gevent.spawn(redis_call)]
    gevent.joinall(jt)

    #SOME BLOCKING CODE

    #MAKE A REDIS CALL AND SERVICE OTHER REQUESTS
    jt = [gevent.spawn(redis_call)]
    gevent.joinall(jt)

    if total_time<.09:
        yield "passed"
     else:
        yield "failed"
@post(“/test”)
def test():
#启动计时器
#一些阻塞码
#拨打REDIS电话并为其他请求提供服务
jt=[gevent.spawn(redis_调用)]
gevent.joinall(jt)
#一些阻塞码
#拨打REDIS电话并为其他请求提供服务
jt=[gevent.spawn(redis_调用)]
gevent.joinall(jt)

如果总时间我尝试了,但没有成功。它没有超时。jt=gevent.spawn(cookie\u redis\u call,guid)jt.join(.0009)jt.kill()确保你的猴子补丁redis py变得非常好!它起作用了,但我如何知道是否有超时?现在我一个也没有了。但我需要知道是否有一个由于超时而没有,而不是没有做没有键…什么超时?您可以通过执行“if g:”来检查g是否仍在运行
# start redis_call in a background greenlet
g = gevent.spawn(redis_call)

# wait for up to 90 seconds for redis_call to complete
g.join(90)

# if g has finished, kill() is a no-op
# if g is still running, kill() will interrupt it (by raising GreenletExit in it)
# by default, kill() waits for greenlet to exit (which might never happen, 
# if redis_call caught GreenletExit and ignored it). You can also do g.kill(block=False) to
# avoid waiting for killing to complete 
g.kill()