Stworzyłem skrypt do monitorowania wyjścia portu szeregowego, który otrzymuje 3-4 linie danych co pół godziny - skrypt działa dobrze i łapie wszystko, co wychodzi z portu, który na To, co ma znaczenie, jest najważniejsze ...Python/PySerial i użycie procesora
To, co robię, polega na tym, że użycie procesora wydaje się dość wysokie w przypadku programu, który monitoruje pojedynczy port szeregowy, 1 rdzeń zawsze będzie używany w 100%, podczas gdy skrypt jest uruchomiony.
Ja w zasadzie działa zmodyfikowaną wersję kodu w tej kwestii: pyserial - How to Read Last Line Sent from Serial Device
próbowałem odpytywanie funkcja inWaiting() w regularnych odstępach czasu i po to spać kiedy inWaiting() jest 0 - I” Próbowałem interwałów od 1 sekundy do 0,001 sekundy (w zasadzie, tak często, jak tylko mogę, bez zwiększania użycia procesora) - to uda się złapać pierwszą linię, ale wydaje się, że tęsknię za resztą danych.
Ustawienie limitu czasu portu szeregowego nie wydaje się mieć żadnego wpływu na użycie procesora, ani nie umieszcza funkcji nasłuchiwania we własnym wątku (nie, że naprawdę oczekiwałem różnicy, ale warto było spróbować).
- Czy python/pyserial powinien używać tak dużej liczby procesorów? (wydaje się to przesadą)
- Czy marnuję swój czas na to zadanie? Czy powinienem po prostu ukąsić kulę i zaplanować scenariusz snu na okresy, o których wiem, że żadne dane nie nadejdą?
Awesome! To mruczenie jak kociak teraz, obok zerowego użycia procesora i chwyta wszystko, co na niego rzucam. Używałem read (inWaiting()) pod wrażeniem, że będzie on działał tak samo jak read (1) - oczywiście tak nie jest. Dzięki za posprzątanie tego za mnie. –
Fajnie, i dziękuję za umożliwienie mi odkrycia pyserial, Zastanowię się nad następnym razem gram z portami szeregowymi :) – tonfa
Jest doskonały - bezbolesny w konfiguracji i obsłudze, to była jedyna rzecz, z którą miałem problem i ** ja ** był problem. –