Wpis z mikrobloga

Mirki #programowanie #webdev.

Napisałem sobie program w #python #django, który liczy różne rzeczy. Podpiąłem go pod apache dzięki mod_wsgi. Niemniej jednak mam poważny problem. Chciałbym zrobić nieskończoną pętlę, w której wykonywane będą pewne akcje i ewentualnie umożliwić "zarządzanie" akcjami z przeglądarki.

Całość wydawała się początkowo dość prosta - implementacja obserwatora i odpalenie eventu, gdy użytkownik zmodyfikuje coś w przeglądarce. Jednak nie jest to takie proste jak myślałem. Jedyne co mi się udało, to wsadzenie nieskończonej pętli do wsgi.py, ale niestety nie działa to tak jakbym chciał.

Mógłby ktoś przybliżyć jak rozwiązuje się takie problemy? Nawet nie wiem co wpisać w google ( ͡° ʖ̯ ͡°)
  • 20
  • Odpowiedz
@kochmap: tylko że to wlasnie nie bedzie działać tak jak chcę. Teraz odpalam nowy wątek i przy każdym wejściu na stronę odpala się kolejny. Ja chciałbym jedną nieskończoną pętlę, której będę mógł modyfikować parametry (np co ile sekund ma się wykonywać akcja). Teraz za każdym razem odpala się nowy wątek z nowymi parametrami.
  • Odpowiedz
@player11one musisz przechowywać dany wątek między wywolaniami. Jeśli nie ma zmiennych dzielonych między wywolaniami w apachu to pozostaje ci odpalenie nowego procesu i komunikacja z nim. Pewnie są inne sposoby ale to tak na szybko.
  • Odpowiedz
@player11one: Kiedyś zrobiłem przyciski na panelu admina do kontroli pojedynczego wątku. Wątek był uruchamiany przez serwer i chodził w kółko aż do wydania komendy śmierci. (wtedy kończył obieg w najbliższym zaplanowanym miejscu)

Zaimplementuj jakiegoś singletona, zmienna klasowa albo coś. Da się to zrobić.
  • Odpowiedz
@less_is_more: co w tym dziwnego. Narzut masz nieduży a dotego protokół http. Dużo nie kosztuje socket tcp/ip i przesyłanie nagłówka. Do tego multum frameworków np. flask który za pomocą jednej adnotacji czy tam dekoratora(nie wiem jak to się nazywa w pythonie) postawi endpoint. Do tego dochodzi docker itp...
  • Odpowiedz
@less_is_more: różnica jest taka, że zamiast socketu unixowego masz tcp/ip albo nawet ten sam socket. W pracy mam kilka deployi na serwerze aplikacyjnym i każdy ma inny url, daje to dużo swobody i enkapsuluje rozłączne kawałki produktu.
  • Odpowiedz
@kochmap: Nie wiem, dziwnie dla mnei to wyglada. Skoro mozesz bardziej surowo ogarnac temat po socketach, a robisz do po http to wydaje mi się, że nei jest to eleganckie, aczkolwiek na pewno wygodne i szybsze. Nie chce deprecjonować, wyrazam tylko swoją opinię.
  • Odpowiedz
a sprawa, ze nie zawsze to co jest dostepne to dobre rozwiazanie w kazdym przypadku (wydajnosc, przerost formy nad trescia, etc).


@less_is_more: no nie wiem, przykład który dałem czyli flask jest raczej dobrym i lekkim frameworkiem a do tego sporo czasu już istnieje. Ponadto jeśli to jest postawiane na django czyli frameworku webowym to narzut komunikacyjy z drugim procesem jest pomijalny. Ja bym osobiście wybrał http jeśli można postawić serwer. Raz
  • Odpowiedz
@kochmap: Ja generalizowalem, akurat flask jest na tyle 'mini', ze jasne, az sie prosi zeby uzyc chociazby do wystawienia po http paru urli. Na socketach w sumie trzeba obsluzyc dodatkowo cala otoczke po odebraniu danych.
  • Odpowiedz