gpt4 book ai didi

python - 在 Python 中并行运行函数

转载 作者:行者123 更新时间:2023-12-01 05:39:52 33 4
gpt4 key购买 nike

我想在 Python 中与主程序并行运行一个函数。假设我有语音识别功能。我希望它在后台运行,并在听到特定的话语时中断主程序。但与此同时,我还有其他任务要做。因此,语音识别应该作为一个单独的过程来工作,并且可以在听到命令时调用一个函数。

我尝试了 python multiprocessing 模块、thread 模块和 threading 模块。但所有这些都需要我等到进程或线程完成。我想要的是允许我在后台运行函数的东西。如果发生特定事件,他们必须调用一些回调函数。

我希望我能找到一种有效的方法来做到这一点。

我尝试了线程模块。代码如下(伪代码):

def detected(text):
commands = 'a list of commands'
if text in commands:
#call some function according to the command

def speech_recognition():
#while True:
#If speech detected:
#record it
#process it and covert it to text
#if text is a specified command:
#call the detected(text) function with the recognized text as argument

import threading as t

pr = t.Thread(target=speech_recognition)
pr.start()

#from here starts the main program that does some other functions that
#doesn't need to be mentioned here.

但这行不通。语音识别运行几秒钟,然后就退出。没有引发异常,没有系统退出,什么都没有。当我尝试多处理线程模块时,情况是一样的。

最佳答案

我不知道 CPU 密集型语音识别的情况如何,但我很确定您所描述的问题最好通过实体之间的最大解耦(即进程分离)来解决。简单的场景:其中一个进程运行“主程序”,另一个进程完全负责语音识别。然后,您可以在这些进程之间实现通信协议(protocol)。 “主程序”仍然需要某种事件系统和基于线程的异步执行,因为它需要能够监听语音识别进程发送的事件并立即使用react。因此,工作模型将包含:

  • 一个不应受 CPU 限制的主进程
  • 通过多处理生成一个子进程,处理语音识别
  • 支持在主进程和子进程之间传输数据/事件的通信协议(protocol)
  • 主进程中的一个附加线程,用于等待子进程发送的事件并确保主程序做出相应 react

主进程和子进程按照操作系统的计划同时运行。当然,这在至少有两个 CPU 核心的系统上效果最好。在主进程中,主线程和另一个线程并不是真正同步运行——由于 CPython 的全局解释器锁(GIL),一次只能运行一个线程。

主进程和子进程之间的通信可以通过基本的多处理工具来实现,例如QueuePipe

正如您所意识到的,您需要认真思考这样的问题。不要试图快速解决这个问题,或者只是通过反复试验来解决。您需要确保您了解自己开发的架构。

关于python - 在 Python 中并行运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898479/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com