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

时间:2013-06-29 12:57:13

标签: 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来克服这个问题,一旦线程完成,语音合成就会响应客户端。

对我来说,实现线程不是问题,但我不知道在上述场景中需要响应客户端的烧瓶处理程序。任何文档或示例实现都表示赞赏。

1 个答案:

答案 0 :(得分:2)

一种简单,低技术的方法可以实现这一点,即通过向客户端返回一个响应来指示服务器正在处理请求,并与此并行启动线程来完成工作。您将为每个工作线程分配一个唯一的ID。

显示“处理”消息的响应页面将有一个自动重定向,在5秒之后启动。重定向将是一个带有工作线程ID的新Flask路由。与此路由关联的视图函数检查工作线程的状态,如果该线程仍在工作,它将使用相同的“处理”页面进行响应,以便客户端将在另外5秒内重新定向。

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

我希望这会有所帮助。

相关问题