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

2024-09-29 22:01:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个函数要做一些事情。我需要它们同时运行,直到except情况发生,所以我使用了多重处理,但是每当我执行代码时,它从代码的开头无限地运行,其中有几行代码,然后是两个函数。我的代码如下所示:

'''
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

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


Tags: 函数代码targetdef情况sensor事情process
3条回答

你的代码中有一些要点。首先,如果要执行多个函数,并不意味着每次都要像当前那样创建多个进程。每个函数只需要一个进程或线程。 其次,我假设您希望您的函数永远同时运行,所以您需要在每个函数中放置无限循环。你知道吗

from time import sleep
from multiprocessing import Process


def 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

为主进程设置睡眠以获得键盘中断:

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

此外,我认为在无限循环中创建新进程不是一个好的做法。你知道吗

我想你是想这样做的:

from multiprocessing import Process

def sensor():
    # Do Somthing
    pass

def balance_fun():
    # Do Somthing
    pass

if __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,而不是复制和修改代码块。你知道吗

相关问题 更多 >

    热门问题