player11one
player11one
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 ( ͡° ʖ̯ ͡°)
  • Najlepsze
  • Wszystkie komentarze
abdulafaja
abdulafaja
l.....e
l.....e
@player11one: komunikację mozesz zrobić przez sockety
kochmap
@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.
kochmap
@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.
l.....e
l.....e
@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.
kochmap
Ja generalizowalem


@less_is_more: jeśli tak to w 100% się z tobą zgadzą poza małym odstępstem czyli cele edukacyjne.
kochmap
@player11one python threading wpisz. Musisz uruchomić nowy wątek. Niestety python posiada tylko zielone wątki
player11one
player11one
player11one Autor
0
@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.
l.....e
l.....e
@player11one: zrob deamona, który chodzi w tle i komnikuje sie ze skryptem, ktory jest uruchamiany po wejsciu na stronę.
player11one
player11one
player11one Autor
0
@less_is_more: ototo, mógłbyś dać podpowiedź jak to najlepiej zrobić?
player11one
player11one
player11one Autor
0
@less_is_more: racja, super pomysł, szkoda ze sam na niego nie wpadłem. Dzięki cumple( ͡° ͜ʖ ͡°)
kochmap
@player11one albo na chama postaw webservice na flasku i przez http.
l.....e
l.....e
albo na chama postaw webservice na flasku i przez http


@kochmap: Komunikacja na tej samej maszynie oparta o http? pls
Ilythiiri
@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ć.
dikamilo
dikamilo
@player11one: imho osobny demon i komunikacja to chyba najlepszy pomysł, jak nie chce ci się bawić podstawowymi modułami do komunikacji to możesz np. użyć http://pythonhosted.org/pulsar/index.html
kochmap
@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...
l.....e
l.....e
@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ę.
kochmap
@less_is_more: eleganckie bo nie wyważasz drzwi już kiedyś otwartych. Po co wynajdować coś od nowa jak jest masa dobrego kodu już napisanego.
l.....e
l.....e
@kochmap: To, ze coś juz jest to jedno, inna sprawa, ze nie zawsze to co jest dostepne to dobre rozwiazanie w kazdym przypadku (wydajnosc, przerost formy nad trescia, etc).
kochmap
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.