我有一个 websocket 作为另一个任务运行。 此聆听任务使用生成器功能从麦克风流式传输音频。它阻塞了 websocket 任务,因此 websocket 任务无法 ping pong 服务器,我们断开连接。
audio_generator 必须是一个异步生成器,否则它会阻塞 websocket。 所以如果我让它异步,它会说异步生成器不可迭代。
这是因为生成器表达式不支持异步生成器?
异步更改前的原始代码:
requests = (speech.StreamingRecognizeRequest(audio_content=content)
for content in audio_generator)
// requests is a standard generator
responses = client.streaming_recognize(streaming_config, requests)
所以我将生成器表达式转换成这个
def responses_gen(audio_generator, speech):
for content in audio_generator:
yield speech.StreamingRecognizeRequest(audio_content=content)
像这样使用它
audio_generator = stream.generator()
requests = responses_gen(audio_generator, speech)
responses = client.streaming_recognize(streaming_config, requests)
这不起作用。
无异常迭代请求!这意味着它可能无法理解我提供的 streaming_recognize 函数
请注意,audio_generator 使用一个 while True 循环,它带有一个 yield 和一个 asyncio.sleep(0.01)。
有什么好办法吗?我正在考虑使用一个线程,然后将结果发送到队列以供 websockets 任务接收,但我想避免这种情况。 如果这会干扰音频流的延迟,那么我想这是个好主意。