为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

长风秋雁 2021-11-02 16:22:58
我有两个函数可以做一些事情。我需要它们同时运行,直到出现异常情况,所以我使用了多处理,但是每当我执行我的代码时,它都会从代码的开头无限运行,其中有几行代码,然后是我的两个函数。我的代码看起来像这样:'''few line of code'''def func_1():    # Do Somthingdef func_2():    # Do Somthingwhile 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我的代码从一开始就无限执行,或者问题出在其他地方,我的多处理有什么问题吗?
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您的代码中有一些要点。首先,如果您想执行多个功能,并不意味着像您目前所做的那样每次都创建多个进程。每个函数只需要一个进程或线程。其次,我假设您希望您的函数永远同时运行,因此您需要将无限循环放入每个函数中。


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


查看完整回答
反对 回复 2021-11-02
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

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


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


查看完整回答
反对 回复 2021-11-02
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

为主进程休眠以获取键盘中断:


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

此外,我认为在无限循环中创建新流程不是一个好习惯。


查看完整回答
反对 回复 2021-11-02
  • 3 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号