我有两个函数,它们要做些什么。我需要他们,直到除了发生的情况下同时运行,所以我用多,但每当我执行我的代码,它从无限的代码存在的代码,然后我的两个函数几行开始运行。我的代码看起来是这样的:
'''
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
此外,我认为在一个无限循环创建新的进程是不是一个好的做法。