我有一个项目,其中用户将从android/web发送音频文件到服务器。我需要在服务器上执行语音到文本处理,并在android/web上向用户返回一些文件。然而,服务器端将使用Python完成。请告诉我该怎么做?
除了你的web应用程序,你可以有一个需要运行的任务队列和工作进程(es)来运行和跟踪这些任务。当web请求需要在后台启动任务、检查任务或获取任务结果时,这是一种流行的模式。关于此模式的介绍可以在全栈Python开放书籍的任务队列部分找到。芹菜和RQ是两个流行的项目,它们提供任务队列管理,可以插入到现有的Python web应用程序中,比如用Django或Flask构建的应用程序。
一旦你有了任务管理,你就必须决定如何让用户了解任务的最新状态。如果你只能使用rpc风格的web服务调用,那么你可以让客户端(例如Android或浏览器)通过调用你创建的web服务来轮询状态,该web服务通过任务队列管理器的API来检查任务。
如果你想更快地通知用户,或者想减少由于不断轮询而造成的浪费开销,可以考虑提供websocket。通过websocket连接,客户端可以订阅事件通知,例如完成语音转文本作业。Autobahn|Python库提供了用于实现websockets的服务器代码,以及对一个名为WAMP的协议的支持,该协议可用于通信订阅和消息或调用服务。如果你需要继续使用Django,可以考虑使用Django -websocket-redis。