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

Object Storage Arubacloud
+1 głos
258 wizyt
pytanie zadane 25 maja 2021 w Python przez Oskar Szkurłat Bywalec (2,780 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 (344,860 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,780 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,780 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 477 wizyt
pytanie zadane 1 marca 2018 w Python przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 338 wizyt
+1 głos
1 odpowiedź 134 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...