[英]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.