send_file 似乎暂停了整个网络服务器,直到文件被发送
send_file seems to pause the whole web server until the file is sent
当我在媒体列表中的任何歌曲上按下播放时,它必须发送一个 send_file... 但是当 send_file 正在进行时,整个网站会冻结,这意味着如果这send_file 发生并且有人访问网站的主页,他们将等待 send_file 需要的时间。
这是我的代码:
@app.route('/getMedia/')
def getMedia():
file = request.args.get('filename')
def getReqFile():
with open(f'./media/{file}', mode="rb") as file_like:
yield from file_like
try:
# send_file(f'./media/{file}', conditional=True, as_attachment=True)
return Response(getReqFile())
except FileNotFoundError:
return 'The media you tried to view doesn\'t exist.'
我不确定如何更好地措辞,所以如果没有意义,我很抱歉。
尽管这部分通常被忽视,但可以让您抢先一步
if __name__=="__main__":
app.run(threaded=True)
尽管您不应该完全依赖它。
带线程=真
SocketServer.ThreadingMixIn class
的实现
在新的不同线程中处理每个请求。服务器可用于同时处理请求的线程数完全取决于您的 OS 以及它对每个进程的线程数设置的限制。所以没有限制,或者更确切地说,线程限制取决于您的服务器功能。
当我在媒体列表中的任何歌曲上按下播放时,它必须发送一个 send_file... 但是当 send_file 正在进行时,整个网站会冻结,这意味着如果这send_file 发生并且有人访问网站的主页,他们将等待 send_file 需要的时间。
这是我的代码:
@app.route('/getMedia/')
def getMedia():
file = request.args.get('filename')
def getReqFile():
with open(f'./media/{file}', mode="rb") as file_like:
yield from file_like
try:
# send_file(f'./media/{file}', conditional=True, as_attachment=True)
return Response(getReqFile())
except FileNotFoundError:
return 'The media you tried to view doesn\'t exist.'
我不确定如何更好地措辞,所以如果没有意义,我很抱歉。
尽管这部分通常被忽视,但可以让您抢先一步
if __name__=="__main__":
app.run(threaded=True)
尽管您不应该完全依赖它。
带线程=真 SocketServer.ThreadingMixIn class
的实现在新的不同线程中处理每个请求。服务器可用于同时处理请求的线程数完全取决于您的 OS 以及它对每个进程的线程数设置的限制。所以没有限制,或者更确切地说,线程限制取决于您的服务器功能。