以下は、ボトル内の私のコードです。gevent ループで uWSGI を使用しています。リクエストの時点から、リクエスト全体に 90 ミリ秒以上かかっている場合は false を返す必要があります。gevent を使用して 90ms 後にタイムアウトする方法がわかりません。ブロッキング コードは 2 ミリ秒未満です。問題はredis呼び出しです。負荷がかかっていない場合でも、ほとんど負荷がかかっていない場合でも、リクエスト全体にかかる時間は 20 ミリ秒未満です。重度の負荷がかかると、redis の呼び出しに時間がかかることがあります...それ以上かかる場合は、タイムアウトする必要があります。そのため、最初の redis 呼び出しから、リターンに 90 ミリ秒以上かかる場合はタイムアウトになります。90ms 未満の場合は、残りを計算します。たとえば、呼び出し 1 に 60 ミリ秒かかる場合、呼び出し 2 には 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"