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/11/2017 12:27 AM, Mihai Osian wrote:
> 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
Acum da. Am gasit un exemplu mai complet de utilizare a bibliotecii
paho-mqtt. Dupa disconnect se pune un delay de vreo 5 sec si apoi
loop_stop . Asa nu imi mai da balbe
Multumesc
Paul