Wpis z mikrobloga

#programowanie #python

Hej mirki,
Napisalem sobie aplikacje w pythonie z restowym kontrolerem przy pomocy flaska. Chciałbym nia sterować przekaźnikiem na #raspberrypi. Wszytsko działa dobrze jeśli pozwalam endpointowi wykonać się do końca ale ja potrzebuję zaworu bezpieczeństwa w stylu /stop który przerwie działanie wykonywanej metody. Zakładam, że potrzebuję jakiejś globalnej zmiennej/ listenera /eventu którego będę nasłuchiwał i w przypadku gdy go wykryję przerwę dzialanie poprzedniej metody - mogę was prosić o jakieś wskazówki czego szukać? #java here dlatego nie wiem jakiego mechanizmu mogę użyć w pythonie
  • 4
@profaza: Nie ma "ładnego" rozwiązania dla tego problemu.

Poczytaj o "Streaming Content" https://flask.palletsprojects.com/en/1.1.x/patterns/streaming/

W przypadku gdy klient przerwie połączenie, "streaming" przestanie się wykonywać.
Rzuć okiem na przykład w w/w linku, możesz zmodyfikować funkcję "generator" by zwracala rezultat tylko gdy ten jest "obliczony".

def generate():
....while True:
........if result_processing():
............yield "" # return dummy response if still processing
........else:
............ yield result

Daj znać czy taki problem chciałeś rozwiązać
@Lunatik: Dzieki za wskazówkę ale chyba nie o to mi chodzi. Konkretny przykład - użytkownik woła api /zróbX
metoda zróbX sklada się z 3 sekwencji różnych akcji które trwają powiedzmy 2 minuty każda. Jeśli będę sprawdzal czy użytkownik przerwał akcje przed rozpoczęciem kolejnej to będę mial w najgorszym wypadku 2 minuty opóźnienia jeśli przerwie ją tuż po rozpoczęciu bo kolejne sprawdzenie będzie dopiero przed wykonaniem kolejnej akcji. Ja chciałbym zrobić coś
@mackarr: @Lunatik: dzieki za porady ale zrobilem to prawie tak jak opisalem - w metodzie stop zmieniam wartosc zmiennej ktora jest uzywana w metodzie zrobX przez co leci exception który ubsluguje i w finally ustawiam sobie stan po przerwaniu. Dzieki za pomoc