Re: Script python se termina cateodata cu "Exception in thread Thread-1 (most likely raised during interpreter shutdown):"
"Paul Lacatus (Personal)" <[email protected]>
| Newsgroups | gmane.org.user-groups.rlug.offtopic |
|---|---|
| Message-ID | <[email protected]> |
On 1/9/2017 7:22 PM, Mihai Osian wrote:
> On 01/09/2017 10:22 AM, Paul Lacatus (Personal) wrote:
>> LA multi ani pe 2017!
>>
>> Am o intrebare cu referire la un programel python care ruleaza pe un
>> Raspberry pi . Programelul este lansat la fiecare minut din Crontab .
>> Job-ul lui este sa citeasca date dintr-un device pe MODBUS RTU sa le
>> stocheze intr-un fisier si apoi sa le transmita catre un Broker MQTT (
>> mosquitto) folosind paho_mqtt . Din cand in cand , cam 50% din cazuri ,
>> se termina cu exceptia "Exception in thread Thread-1 (most likely raised
>> during interpreter shutdown):" . Nu pare sa afecteze functionalitatea
>> scriptului desi datele in brokerul MQTT nu par a ajunge chiar toate
>> dar inca nu stiu pe cine sa dau vina , Raspberry pi e conectat la
>> reteaua GPRS Vodafone cu un stick de date .
>>
>> Mai intii vreau sa inteleg ce inseamna exceptia respctiva , pentru ca nu
>> m-am lamurit pe ce am gasit pe net .
>>
>> Apoi sa vad cum testez mai in detaliu comunicatia cu MQTT
>>
>> _______________________________________________
> Habar n-am cu ce se mananca mosquitto, dar probleme gen "exception
> during shutdown" imi suna familiar. As sugera sa verifici daca scriptul
> face cleanup la libraria MQTT inainte sa se termine. E posibil sa ai un
> race-condition intre threadul principal si ala/alea din bucataria
> interna MQTT. Threadul principal se termina si cheama diverse rutine de
> clean-up (de exemplu distruge shared memory segments, file descriptors,
> whatever), fara sa stie despre sau sa astepte threadul muncitor din
> background. Threadul din background incearca sa acceseze oarice resursa
> care a disparut si crapa. Deci: verifica daca ai inchis toate
> conexiunile si oprit background processing loops, sau daca orice rutina
> de initializare pe care o foloseste scriptul are si o pereche (absenta)
> care ar trebui sa faca cleanup.
>
> Hth,
> Mihai
>
>
>
Da . E o problema de threading la mqtt . Am observat ca la incercarea de
a publica mai multe informatii pe broker nu ajungeau toate . A trebuit
sa pun ceva delay intre publicari .
Publicarea pe mqtt arata de felul
mqttc = mqtt.Client();
mqttc.connect(mqtt_broker , 1883, 120);
mqttc.loop_start()
mqttc.publish ("sing/electrice/contor1/VL1N",VL1N);
mqttc.publish ("sing/electrice/contor1/VL2N",VL2N);
mqttc.publish ("sing/electrice/contor1/VL3N",VL3N);
time.sleep(0.5)
mqttc.publish ("sing/electrice/contor1/C1",C1);
mqttc.publish ("sing/electrice/contor1/C2",C2);
mqttc.publish ("sing/electrice/contor1/C3",C3);
time.sleep(0.5)
mqttc.publish ("sing/electrice/contor1/PL1",PL1);
mqttc.publish ("sing/electrice/contor1/PL2",PL2);
mqttc.publish ("sing/electrice/contor1/PL3",PL3);
time.sleep(0.5)
mqttc.publish ("sing/electrice/contor1/QL1",QL1);
mqttc.publish ("sing/electrice/contor1/QL2",QL2);
mqttc.publish ("sing/electrice/contor1/QL3",QL3);
time.sleep(0.5)
mqttc.publish ("sing/electrice/contor1/CF1",math.fabs(CF1));
mqttc.publish ("sing/electrice/contor1/CF2",math.fabs(CF2));
mqttc.publish ("sing/electrice/contor1/CF3",math.fabs(CF3));
time.sleep(0.5)
mqttc.publish ("sing/electrice/contor1/CF1t",CF1t);
mqttc.publish ("sing/electrice/contor1/CF2t",CF2t);
mqttc.publish ("sing/electrice/contor1/CF3t",CF3t);
time.sleep(0.5)
mqttc.publish ("sing/electrice/contor1/FRQ",FRQ);
mqttc.publish ("sing/electrice/contor1/ACPO",ACPO);
mqttc.publish ("sing/electrice/contor1/REPO",REPO);
mqttc.publish ("sing/electrice/contor1/APPO",APPO);
time.sleep(0.5)
mqttc.publish ("sing/electrice/contor1/CFI",CFI);
## mqttc.publish ("sing/electrice/contor1/ACPO2",ACPO);
## mqttc.publish ("sing/electrice/contor1/REPO2",REPO);
## mqttc.publish ("sing/electrice/contor1/APPO2",APPO);
time.sleep(1)
mqttc.disconnect()
||
Asa imi transmite toate informatiile catre broker dar tot mai termina
din cand in cand cu eroarea de care am discutat