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

+1 głos
119 wizyt
pytanie zadane 25 maja 2021 w Python przez Oskar Szkurłat Bywalec (2,730 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 2021 przez adrian17 Ekspert (322,800 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 2021 przez Oskar Szkurłat Bywalec (2,730 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 2021 przez niezalogowany
wybrane 25 maja 2021 przez Oskar Szkurłat
komentarz 25 maja 2021 przez Oskar Szkurłat Bywalec (2,730 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 2021 przez niezalogowany

Nie ma za co winkyes

Pozdrawiam

Podobne pytania

0 głosów
0 odpowiedzi 300 wizyt
pytanie zadane 1 marca 2018 w Python przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 245 wizyt
+1 głos
3 odpowiedzi 204 wizyt
pytanie zadane 26 kwietnia 2021 w JavaScript przez molik Użytkownik (950 p.)

89,097 zapytań

137,682 odpowiedzi

307,638 komentarzy

59,152 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

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

...