Salvesen. Skrevet 28. juni 2014 Del Skrevet 28. juni 2014 Hei, Jeg sliter litt med å få til noe, har laget en GUI applikasjon me Tkinter hvor jeg kan kalle noen funksjoner med ett par knapper for å sjekke ett par ting. Jeg ønsker å kalle en av funksjonene uten å trykke på noe som helst på ett gitt tidspunkt hver dag. Noen som vet om dette er mulig? Uten å kjøre en kontinuerlig loop for å sjekke tidspunkt? Lenke til kommentar
etse Skrevet 28. juni 2014 Del Skrevet 28. juni 2014 På et eller annet punkt må det være en løkke som sjekke noe - som går kontinuerlig. Om den er skjult for deg i rammeverket eller om du implementerer den selv er litt opp til deg. En slik løkke, implementert riktig vil heller ikke være veldig kostbar. En mulig implementasjon er å ha en egen tråd som sjekker tidspunktet med 30 sekunders mellomrom (og sover ellers) for å kun utføre ønsket oppgave 1 gang om dagen. Dette vil kreve neglisjerbare ressurser. En annen mulighet, og kanskje bedre, er å bruke sched-biblioteket i python. Dette kan brukes til å sette opp oppgaver som skal utføres frem i tid - men den kan ikke brukes til å sette opp ting som skal kjøre på faste intervaller. Men dette kan jo lett implementeres ved å bare sette opp funksjonen til å kjøre neste dag hver gang den blir kallt. Eksempel på mulig implementasjon: import time import sched import datetime def main(): def daily_function(my_argument): print "do something here, " + my_argument one_day = datetime.timedelta(days=1).total_seconds() scheduler.enterabs(time.time()+one_day, 1, daily_function, ("Repeated run",)) scheduler = sched.scheduler(time.time, time.sleep) scheduler.enterabs(time.time(), 1, daily_function, ("First run",)) scheduler.run() if __name__ == '__main__': main() Lenke til kommentar
snippsat Skrevet 28. juni 2014 Del Skrevet 28. juni 2014 De fleste GUI rammeverk har bygd inn funksjoner for dette. Tkinter har after som kan brukes til dette. import Tkinter as tk def foo(): return 'foo got called' root = tk.Tk() def task(): print 'Calling function {} --> {} '.format(foo.__name__, foo()) root.after(5000,task) #Schedule event in 5 seconds root.after(5000,task) root.mainloop() Så kan det diskuteres om det smart og la GUI kjøre hele tiden og gjøre jobben,eller se på noe som etse postet. Har brukt sched-biblioteket før og det har fungert fint. Viss dette er noe som skal kjører over lengre periode kan man også tenke på og bruke OS(Windows scheduler, Linux Cron). Lenke til kommentar
TheClown Skrevet 22. juli 2014 Del Skrevet 22. juli 2014 For at dette skal fungere, så kreves det at scriptet står og går hele dagen. Den mest brukte metoden for å løse et slikt problemer er å ha en server og (som Lync sier ovenfor) koble opp scriptet med cronjobs. Lenke til kommentar
Gjest Slettet+2534 Skrevet 7. august 2014 Del Skrevet 7. august 2014 Jeg ville nok brukt cronjobs. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå