即使使用try-except,python进程也将终止

即使使用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

我有一个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=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客户机