• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odpowiednik setInterval() z JS w Pythonie?

+2 głosów
60 wizyt
pytanie zadane 25 maja w Python przez Oskar Szkurłat Obywatel (1,950 p.)
Cześć, stawiam pierwsze swoje kroki w pythonie, ale znam dosyć dobrze JavaScript i potrzebuję właściwie przepisać mój program na pythona. Szukam odpowiednika setInteraval z JavaScript do Pythona. Jest inna opcja, niż specjalnie angażować w to asyncio i budować osobny wątek? ;(
komentarz 25 maja przez adrian17 Ekspert (297,140 p.)

A powiesz co w ogóle chcesz zrobić, do czego to potrzebujesz? Z natury setInterval jest po prostu mniej potrzebny w Pythonie.

BTW:

niż specjalnie angażować w to asyncio i budować osobny wątek?

"asyncio" i "budować wątek" brzmią dziwnie obok siebie, to raczej zupełnie różne podejścia...?

komentarz 25 maja przez Oskar Szkurłat Obywatel (1,950 p.)
Potrzebuję konkretnie identyczną zasadę, jak w setInterval() w JavaScript, czyli ustawić sobie interwał czasowy, na np. 10 ms żeby sobie pracował "w tle", tzn. nie wstrzymywał programu. Do tego dobrze by było żeby dało się go przypisać do zmiennej, tak aby w innym punkcie programu móc zatrzymać pracę interwału (w JS clearInterval()).
Słuszna uwaga, napisałem wątek, miałem na myśli taski, bądź loopy.

1 odpowiedź

+2 głosów
odpowiedź 25 maja przez MarioG8 Maniak (53,750 p.)
wybrane 25 maja przez Oskar Szkurłat
1
komentarz 25 maja przez Oskar Szkurłat Obywatel (1,950 p.)

Dziękuję, sporo z tych rozwiązań zwracało błędy, ale to śmiga dokładnie, tak jak chciałem ;)
 

import time, threading

StartTime=time.time()

def action() :
    print('action ! -> time : {:.1f}s'.format(time.time()-StartTime))


class setInterval :
    def __init__(self,interval,action) :
        self.interval=interval
        self.action=action
        self.stopEvent=threading.Event()
        thread=threading.Thread(target=self.__setInterval)
        thread.start()

    def __setInterval(self) :
        nextTime=time.time()+self.interval
        while not self.stopEvent.wait(nextTime-time.time()) :
            nextTime+=self.interval
            self.action()

    def cancel(self) :
        self.stopEvent.set()

# start action every 0.6s
inter=setInterval(0.6,action)
print('just after setInterval -> time : {:.1f}s'.format(time.time()-StartTime))

# will stop interval in 5s
t=threading.Timer(5,inter.cancel)
t.start()

 

komentarz 25 maja przez MarioG8 Maniak (53,750 p.)

Nie ma za co winkyes

Pozdrawiam

Podobne pytania

0 głosów
0 odpowiedzi 280 wizyt
pytanie zadane 1 marca 2018 w Python przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 194 wizyt
+1 głos
3 odpowiedzi 86 wizyt
pytanie zadane 26 kwietnia w JavaScript przez molik Użytkownik (820 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

84,091 zapytań

132,861 odpowiedzi

293,830 komentarzy

55,529 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...