Skrypt wisi w losowych momentach

0

Napisałem klasę która pobiera dane z bazy Sello i wysyła je po api do systemu jednej z firm kurierskich. Wszystko działa jak należy, dopisałem skrypt który odpala wysyłkę co godzinę od 16 do 20, oraz dodałem go do harmonogramu zadań Windows. Problem polega na tym, że raz na jakiś czas skrypt zawiesza się "w połowie", czyli np. w logu mam wysyłkę o 16, o 17 ale następnych już nie. Jak mogę zdiagnozować taki problem? Raz "przyłapałem" skrypt na takiej sytuacji, w konsoli zero informacji że coś jest nie tak, po prostu informacja z wcześniejszej wysyłki i nic więcej. Zorientowałem się, że wisi bo godzina wskazywała że powinna pójść już następna. W tej sytuacji wystarczyło wcisnąć enter i poszedł dalej. Problem występuje naprawdę rzadko - 2 może 3 razy od lutego. Ani w skrypcie wywołującym ani w klasie nigdzie nie pobieram danych od użytkownika. Klasa zajmuje się pobraniem danych z bazy, sformatowaniem ich i wysyłką i ma to robić bez jakiejkolwiek pomocy, ew. jak coś jest nie tak wywalić info na konsoli + zapisać w logu i kulturalnie się zamknąć. Tymczasem tutaj czysto, po prostu zatrzymuje się i czeka. Skrypt który odpala to co godzinę wywołuje tylko metodę i pause.until(datetime.now() + timedelta(minutes=60)), czyli godzina do następnego wywołania. Nigdzie nie widzę możliwości takiego zatrzymania, a jednak czasem się zatrzyma. Same dane z sello raczej za to nie odpowiadają, bo raz że w takiej sytuacji byłoby to obsłużone i przynajmniej byłby jakiś ślad co poszło nie tak, a dwa że kiedy po takim zdarzeniu ręcznie odpalę skrypt wszystko działa jak trzeba - dane są zaciągane z bazy, formatowane i wysyłane. Jak mogę wykryć powód takiego zjawiska?

0

Hej

a obsługujesz wszystkie wyjątki ? np co sie wydarzy jak jak masz problem z internetem.. albo problem jest po stronie API kuriera itd.. moze dodaj sobie przy kluczowych fragmentach jakis zapis zmienny do pliku.. wtedy będziesz wiedział na jakim etapie dokładnie wisi program

0

@sight: tak, są dodane wyjątki w miejscach gdzie faktycznie może pójść coś nie tak, czyli baza danych, niepoprawne dane, czy problem z netem lub api. Ale ogólnie podsunąłeś mi pomysł, żeby samo wywołanie w drugim skrypcie też wsadzić w try-except, i faktycznie w except zapisać etap na którym się wysypało. Dzięki, jest szansa że w ten sposób zobaczymy co tam się odczynia ;)

0

try-except zawsze jak moze byc problem z polaczeniem.. z dostępem itd

1 użytkowników online, w tym zalogowanych: 0, gości: 1