Flask:如何使用线程使回调函数非阻塞

2024-09-29 07:18:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用flask框架将文本到语音系统连接到web。基本上,网站通过文本框接受输入并返回一个音频文件。 一旦文本输入文本框并按下下面的按钮,将调用回调。在

def task_text2speech():

    # call to my text to speech system 
    # respond to client

在上面的功能步骤中,“调用我的文本语音转换系统”大约需要30-100秒。在此期间,客户端浏览器将没有任何响应。我想通过启动一个线程来克服这个问题,而不是在task_text2speech中阻塞task_text2speech,一旦线程完成语音合成,就向客户机响应。在

对我来说,实现线程化不是问题,但我不知道在上述场景中响应客户机所需的烧瓶处理程序。感谢任何文档或示例实现。在


Tags: to文本框架webflasktask客户机网站
1条回答
网友
1楼 · 发布于 2024-09-29 07:18:41

一种简单、低技术含量的实现方法是向客户机返回一个响应,指示服务器正在处理请求,同时启动线程来执行该工作。您将为每个工作线程分配一个唯一的ID。在

显示“正在处理”消息的响应页面将有一个自动重定向,在5秒后启动。重定向将指向一个新的Flask路由,该路由使用worker线程ID。与该路由相关联的view函数检查工作线程的状态,如果该线程仍在工作,它将用相同的“processing”页响应,这样客户端将在5秒后再次重定向。在

当处理页面中的重定向处理程序发现工作线程已完成时,它可以重定向到一个新页面,该页面提供生成的音频文件供下载。在

我希望这有帮助。在

相关问题 更多 >