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

问题描述 投票:0回答:1

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

对于像计时器这样的任务,我希望在主线程运行时让它在后台运行,这样即使在计时器运行时我也可以执行其他任务......到达时间后它应该将它作为tts返回到main线

我正在使用的当前结构是

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

python multithreading python-3.x python-multithreading
1个回答
0
投票

关于multithreadingmultiprocessing的几句话:

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

在多处理的另一方面,您运行一个新进程(在OS中它显示为一个单独的程序)。它们可以真正并行运行,但共享变量要复杂得多(而且速度要慢得多)。

对于您的用例,似乎没有两个东西是“CPU绑定”,即不会出现两个事情需要CPU同时100%的情况。在这种情况下,多线程可能是更好的解决方案,那就是你应该选择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']
© www.soinside.com 2019 - 2024. All rights reserved.