2017-06-14 40 views
0

我有下面的代码瓶如何忽略瓶POST请求,如果我呼吁先前请求的功能还没有完成

app = Flask(__name__) 

@app.route("/get_bounding_box", methods=['GET', 'POST']) 
def hello(): 
    res = call_another_func() 

    return "False" 



if __name__ == "__main__": 
     app.run(debug=True, host='10.0.10.15') 

的call_another_func()函数做一些重负载的处理。

与此同时,虽然call_another_func()正忙于处理先前的请求,但如果有另一个请求通过,我只想忽略该请求并等待该函数完成其处理。

如何在Flask中实现此功能?

+0

忘了问,您是否在项目中使用任何异步或多人执行? – Fian

+0

为什么在函数运行时不使用g from flask import g set属性。 – suvy

+0

取决于您的部署环境,可能很容易控制您的应用程序的线程数量,例如在Apache Web服务器中,您可以为您的应用程序配置虚拟主机,以便像WSGIDaemonProcess一样只使用1个线程myapp threads = 1 – suvy

回答

1

为什么你不使用简单的互斥锁和返回状态的请求,而不是忽略它?

app = Flask(__name__) 
import threading 
call_another_func_lock = threading.Lock() 

@app.route("/get_bounding_box", methods=['GET', 'POST']) 
def hello(): 
    if call_another_func_lock.acquire(False): 
     res = call_another_func() 
     call_another_func_lock.release() 
     return "False" 
    else: 
     return "call_another_func is not finished yet" 

if __name__ == "__main__": 
     app.run(debug=True, host='10.0.10.15') 
+0

让我给这个现在就试试。 –

+0

嘿,我得到这个错误 - TypeError:acquire()没有关键字参数 –

+0

我刚刚建议从语法角度对答案进行编辑。我们只需要写出没有任何关键字的“False” –