簡體   English   中英

為什么我的代碼從頭開始無限運行,而不應該從頭開始運行?

[英]Why my code is running from the beginning infinitely while it should not?

我有兩個要執行的功能。 我需要它們同時運行直到發生例外情況,因此我使用了多處理,但是每當我執行我的代碼時,它就從代碼的開頭無限地運行,那里有幾行代碼,然后是我的兩個函數。 我的代碼如下所示:

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

我的代碼從頭開始無限執行的多重處理是否有問題,或者問題出在其他地方?

您的代碼中有幾點。 首先,如果您想執行多個功能,並不意味着每次都像當前一樣創建多個進程。 每個功能只需要一個進程或線程。 其次,我假設您希望您的函數永遠同時運行,因此您需要將無限循環放入每個函數中。

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

我認為您打算這樣做:

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而不是復制和修改代碼塊。

睡眠以獲取鍵盤中斷的主要過程:

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

此外,我認為在無限循環中創建新流程不是一個好習慣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM