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

VPS Starter Arubacloud
+1 głos
257 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,100 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 476 wizyt
pytanie zadane 1 marca 2018 w Python przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 327 wizyt
+1 głos
1 odpowiedź 131 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...