• 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?

Fiszki IT
Fiszki IT
+1 głos
72 wizyt
pytanie zadane 25 maja w Python przez Oskar Szkurłat Bywalec (2,030 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,380 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 Bywalec (2,030 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 niezalogowany
wybrane 25 maja przez Oskar Szkurłat
komentarz 25 maja przez Oskar Szkurłat Bywalec (2,030 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 niezalogowany

Nie ma za co winkyes

Pozdrawiam

Podobne pytania

0 głosów
0 odpowiedzi 284 wizyt
pytanie zadane 1 marca 2018 w Python przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 197 wizyt
+1 głos
3 odpowiedzi 95 wizyt
pytanie zadane 26 kwietnia w JavaScript przez molik Użytkownik (820 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

84,751 zapytań

133,554 odpowiedzi

295,978 komentarzy

56,010 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.

...