为什么我的代码从一开始就无限运行而它不应该?

我有两个函数可以做一些事情。我需要它们同时运行,直到出现异常情况,所以我使用了多处理,但是每当我执行我的代码时,它都会从代码的开头无限运行,其中有几行代码,然后是我的两个函数。我的代码看起来像这样:


'''

few line of code

'''



def func_1():

    # Do Somthing



def func_2():

    # Do Somthing



while True:

    try:

        if __name__ == '__main__':

            sensor_process = Process(target=sensor)

            sensor_process.start()

            balance_process = Process(target=balance_fun)

            balance_process.start()

    except(KeyboardInterrupt, SystemExit):

        break

我的代码从一开始就无限执行,或者问题出在其他地方,我的多处理有什么问题吗?


长风秋雁
浏览 231回答 3
3回答

一只斗牛犬

您的代码中有一些要点。首先,如果您想执行多个功能,并不意味着像您目前所做的那样每次都创建多个进程。每个函数只需要一个进程或线程。其次,我假设您希望您的函数永远同时运行,因此您需要将无限循环放入每个函数中。from time import sleepfrom multiprocessing import Processdef func_1():    # Do Somthing    while True:        print("hello from func_1")        sleep(1)def func_2():    # Do Somthing    while True:        print("hello from func_2")        sleep(1)if __name__ == '__main__':    try:        sensor_process = Process(target=func_1)        sensor_process.start()        balance_process = Process(target=func_2)        balance_process.start()        # if you set a control (flag) on both func_1 and func_2 then these two lines would wait until those flags released        sensor_process.join()        balance_process.join()    except(KeyboardInterrupt, SystemExit):        pass

拉丁的传说

我想你的意思是做这样的事情:from multiprocessing import Processdef sensor():    # Do Somthing    passdef balance_fun():    # Do Somthing    passif __name__ == '__main__':    try:        function_list = [sensor, balance_fun]         process_list = list()        for function in function_list:            proc = Process(target=function)            proc.start()            process_list.append(proc)        for proc in process_list:            proc.join()    except(KeyboardInterrupt, SystemExit):        pass这将在单独的进程中运行每个函数,并在退出之前等待两个进程完成。此外,如果您添加更多功能,您只需要将它们添加到function_list而不是复制和修改代码块。

潇潇雨雨

为主进程休眠以获取键盘中断:while True:    try:        if __name__ == '__main__':            sensor_process = Process(target=sensor)            sensor_process.start()            balance_process = Process(target=balance_fun)            balance_process.start()        time.sleep(1)    except(KeyboardInterrupt, SystemExit):        break此外,我认为在无限循环中创建新流程不是一个好习惯。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python