为什么我的代码是从无限开始虽然它不应该运行?

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

我有两个函数,它们要做些什么。我需要他们,直到除了发生的情况下同时运行,所以我用多,但每当我执行我的代码,它从无限的代码存在的代码,然后我的两个函数几行开始运行。我的代码看起来是这样的:

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

有什么毛病我多,我的代码无限地开始或问题是在其他地方执行?

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

有你的代码中的一些点。首先,如果你想要执行多种功能,这并不意味着创建多个进程,你正在做各一次。你只需要一个进程或每个功能线程。其次,我想你想你的功能同时运行永远,所以你需要把无限循环的每个函数内。

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

1
投票

我想你的意思是做这样的事情:

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,而不是复制和修改的代码块。


0
投票

把睡眠的主要过程,让您的键盘中断:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.