Re: Script python se termina cateodata cu "Exception in thread Thread-1 (most likely raised during interpreter shutdown):"
Mihai Osian <[email protected]>
| Newsgroups | gmane.org.user-groups.rlug.offtopic |
|---|---|
| Message-ID | <[email protected]> |
On 01/10/2017 04:31 PM, Paul Lacatus (Personal) wrote:
>
> 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
> _______________________________________________
> Offtopic mailing list
> [email protected]
> http://lists.lug.ro/mailman/listinfo/offtopic
Vad un mqttc.loop_start(). Asta porneste procesarea in background. Ai si
un mqttc.loop_stop() undeva ?
Mihai