Python 烧瓶-无法实施;“服务器忙”;

Python 烧瓶-无法实施;“服务器忙”;,python,multithreading,flask,server,semaphore,Python,Multithreading,Flask,Server,Semaphore,我有一个Flask应用程序,在每5秒钟内,客户端调用/process路由,有时执行需要太多时间,有时不需要。我使用了信号量,因此,一次只能访问一个路由。如果执行此路由需要很长时间,并且在这段时间内,客户端进行了调用,我不希望客户端继续等待,因此我将中止 为了模拟一些随机执行时间,我使用了sleep方法,这将使程序从列表中随机选择秒数进行睡眠。我使用信号灯,以1作为限制,这样一次只能访问一条路线。并且,我正在获取资源,使用blocking=False选项,以便在释放资源之前不会阻止客户端。下面是我

我有一个Flask应用程序,在每5秒钟内,客户端调用
/process
路由,有时执行需要太多时间,有时不需要。我使用了信号量,因此,一次只能访问一个路由。如果执行此路由需要很长时间,并且在这段时间内,客户端进行了调用,我不希望客户端继续等待,因此我将
中止

为了模拟一些随机执行时间,我使用了
sleep
方法,这将使程序从列表中随机选择秒数进行睡眠。我使用
信号灯
,以
1
作为限制,这样一次只能访问一条路线。并且,我正在获取资源,使用
blocking=False
选项,以便在释放资源之前不会阻止客户端。下面是我的代码的外观:

app.py

从烧瓶导入烧瓶,渲染模板,中止
从线程导入信号量
导入时间
从随机进口选择
app=烧瓶(名称)
sem=信号量(1)
@应用程序路径(“/”)
def index():
返回渲染模板('index.html')
@app.route(“/process”)
def进程():
如果sem.acquire(阻塞=假):
随机睡眠列表=[2,5,7]
随机睡眠选择=选择(随机睡眠列表)
打印('Random Sleep:',Random_Sleep_selected)
时间睡眠(随机选择睡眠)
sem.release()
返回“完成”
其他:
中止(503)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()
index.html


$(文档).ready(函数(){
setInterval(函数(){
console.log('Start')
$.get('/process',函数(数据){
控制台日志(数据);
}).fail(函数(){
警报('服务器忙!');
});
}, 5000);
});
上面的代码无法正常工作,如果执行
/process
路由需要很长时间,并且客户端进行了调用,那么客户端将继续等待,而实际上它不应该这样做,因为信号量已经获取了资源,并且只有在随机选择的秒数完成时才会释放

我想知道,当路由繁忙时,是否有Flask的内置方法或装饰器会说“服务器繁忙”之类的话。或者,只需对代码进行少量修改即可完成此操作。让我知道,我做错了什么,以及如何解决这个问题

提前谢谢


注意:我尝试使用
threaded=True
选项启动Flask应用程序,但这也不起作用。

我做了一个简短的测试(使用
threaded=True
)。我没有使用javascript,我在两个终端上从命令行运行了
wget
,我认为信号灯可以工作。但我必须修复一个错误:
abort()缺少1个必需的位置参数:“status”
@VPfB,谢谢您的尝试。因为,这是2-3天,没有人回答这个问题。这甚至可以在两个不同的选项卡中使用。问题是,我不是在重新加载页面,而是在调用端点并检索一些数据。我想,如果我错了,请纠正我,
wget
命令的作用类似于重新加载。您可以通过传递HTTP状态码(如
503
)来修复
abort()缺少1个必需的位置参数:“status”
。Flask web应用程序的工作方式始终是请求->响应。我认为使用什么工具(
wget
curl
或浏览器)来发送请求和收集响应并不重要。但是从JS框架调用端点应该以类似的方式工作,对吗?