python - flask : How to make call-back function non-blocking using thread

标签 python multithreading web flask nonblocking

我正在使用 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/

相关文章:

Linux命令的Python功能测试

Java Thread Ping Pong 示例

jquery - 如何在 Bootstrap 中将这些图像居中?

python - python图论论文中的一个代码问题

python - Python 采用什么版本的 C?

python - 从装饰器内部获取路由值

javascript - 如何从 mongoDB 中分离字符串

ios - CoreData 阻塞 UI

java - 初学者 Java 多线程编程 : Scheduling Difference between Window and Mac

php - 使用 iOS 缓存 Web 表单