我正在使用 Flask 框架将文本转语音系统连接到 Web。基本上网站通过文本框输入并返回音频文件。 一旦在文本框中输入文本并按下下面的按钮,将调用回调。
def task_text2speech():
# call to my text to speech system
# respond to client
在上面的功能步骤“# call to my text to speech system”中大约需要 30-100 秒。在此期间客户端浏览器不会有任何响应。我想通过启动一个线程而不是在 task_text2speech 中阻塞 task_text2speech 来克服这个问题,一旦线程完成语音合成响应客户端。
对我来说,实现线程不是问题,但我不知道在上述情况下响应客户端所需的 flask 处理程序。感谢任何文档或示例实现。
最佳答案
实现此目的的一种简单、技术含量低的方法是向客户端返回一个响应,指示服务器正在处理请求,并与此同时启动线程来完成工作。您将为每个工作线程分配一个唯一的 ID。
显示“正在处理”消息的响应页面将有一个自动重定向,在 5 秒后启动。重定向将指向采用工作线程 ID 的新 Flask 路由。与此路由关联的 View 函数检查工作线程的状态,如果该线程仍在工作,它会响应相同的“正在处理”页面,以便客户端将在另外 5 秒内再次重定向。
当处理页面的重定向处理程序发现工作线程已完成时,它可以重定向到提供生成的音频文件以供下载的新页面。
希望对您有所帮助。
关于python - flask : How to make call-back function non-blocking using thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17380444/