Python:运行 主线程连续运行,而 运行 其他线程在后台

Python: Running main thread continuously and while running others in background

我正在使用 Python 制作虚拟助手。 为此,我需要一个主线程 运行ning 连续进行,这是语音识别所必需的,并且希望 运行 其他线程在后台检测到 运行 语音后采取行动。

对于计时器之类的任务,我想在主线程运行ning时在后台进行运行ning,这样即使计时器为[=]我也可以执行其他任务30=]ning... 到达时间后它应该 return 它作为 tts 到主线程

我目前使用的结构是

main.py -> class Main() ->Running logger in background // which is meant to exit with mainLoop -> and Command() loop for speech recognition continuously ->`链接到 Brain.py 到 timer.py

关于 multithreadingmultiprocessing 的几句话:

多线程中,您在当前进程中启动一个线程。 Python 运行s(通过 global interpreter lock)线程以短顺序排列,从不真正并行。好处是线程可以访问相同的变量(即共享内存)。

另一方面,在 multiprocessing 中,您 运行 一个新进程(在 OS 中它显示为一个单独的程序)。他们确实可以 运行 并行但是共享变量要棘手得多(也慢得多)。

对于您的用例,似乎没有两件事是 "CPU bound",即不会有两件事同时需要 100% 的 CPU。在这种情况下,多线程可能是更好的解决方案,也就是说你应该选择 James Lim 的解决方案。

如果您仍想进行多处理,那么以下代码可能是您定时器的基本设置。对于语音识别功能,它会相应地(特别是关于返回列表的部分应该足以从语音识别中返回 tts):

import multiprocessing
import time

def timer_with_return(seconds, return_list):
    time.sleep(seconds)
    return_list.append('foo')

if __name__ == "__main__":
    # variables by manager are shared among process
    # e.g. for return values
    manager = multiprocessing.Manager()
    timer_return = manager.list()
    timer = multiprocessing.Process(target=timer_with_return, args=(3, timer_return))
    timer.start()
    while True:
        time.sleep(1)
        if not timer.is_alive():
            break
        print("timer is still running")
    timer.join() # make sure the process is really finished
    print("timer finished, return value is {}".format(timer_return))

运行 这会产生:

timer is still running
timer is still running
timer is still running
timer finished, return value is ['foo']