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

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

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
此外,我认为在无限循环中创建新流程不是一个好习惯。
添加回答
举报