即使使用try-except,python进程也将终止
我有一个raspberry pi 4,它被用作apache和mqtt服务器,我编写了一个python脚本作为无线电和mqtt处理程序,该脚本在开始时启动4个单独的进程:即使使用try-except,python进程也将终止,python,raspberry-pi,multiprocessing,mqtt,raspberry-pi4,Python,Raspberry Pi,Multiprocessing,Mqtt,Raspberry Pi4,我有一个raspberry pi 4,它被用作apache和mqtt服务器,我编写了一个python脚本作为无线电和mqtt处理程序,该脚本在开始时启动4个单独的进程: if __name__ == '__main__': proc1 = Process(target=mqttClient.loop_forever) proc1.start() proc2 = Process(target=receive) proc2.start() proc3 = Process(target=routine
if __name__ == '__main__':
proc1 = Process(target=mqttClient.loop_forever)
proc1.start()
proc2 = Process(target=receive)
proc2.start()
proc3 = Process(target=routineLoop)
proc3.start()
proc4 = Process(target=serverLoop)
proc4.start()
每个函数都有一个true while,并且应该一直运行,每个循环中的代码由try提交,但接收函数如下所示:
def receive():
global radio
radioConfigTime = time.time()
logTime = time.time()
while(1):
try:
if time.time()-logTime >= 30:
logTime = time.time()
now = datetime.datetime.now()
current_time = now.strftime("%H:%M:%S")
rlog(str(current_time))
receivedMessage = []
radio.read(receivedMessage, radio.getDynamicPayloadSize())
string = ""
enterTime = time.time()
for n in receivedMessage:
if time.time()-enterTime>=5:
enterTime = time.time()
rlog("in for loop for "+str(n))
if (n >= 12 and n <= 126):
string += chr(n)
if string[0:3]=="ABC":
function = "sendABC"
repairPARAMS = {'function':function,'id':string[0:10]}
req = requests.get(url = sqliteURL, params = repairPARAMS, verify=False)
except Exception as e:
rlog(str(e))
print("receive exception happened.")
def receive():
全球无线电
radioConfigTime=time.time()
logTime=time.time()
而(一):
尝试:
如果time.time()-logTime>=30:
logTime=time.time()
now=datetime.datetime.now()
当前时间=现在。strftime(“%H:%M:%S”)
rlog(str(当前时间))
receivedMessage=[]
radio.read(receivedMessage,radio.getDynamicPayloadSize())
string=“”
enterTime=time.time()
对于receivedMessage中的n:
如果time.time()-enterTime>=5:
enterTime=time.time()
rlog(“用于“+str(n)”的for循环中”)
如果(n>=12和n为什么在它自己的进程中调用loop\u forever()
,当您可以只调用loop\u start()
时,客户端将在单独的线程上运行它自己的循环?而“Apache”真的是指HTTP?和MQTT客户端(不是代理)是的,你是对的,我可以直接调用loop_start而不是启动proc1,我会改变这一点,但是mqttClient循环工作正常,问题发生在receive loop中。是的,确切地说是http apache服务器和mqtt客户机