Tehtävän ratkaisussa joutuu tutustumaan joko säikeisiin tai tapahtumalooppiin. Pelkkä time.sleep() on liian simppeli, torkkujen aikana ohjelma ei tee mitään.Miten python pitäisi rakentaa, jos haluan syöttää uusia parametrejä while-loopissa / sleep-odotuksessa? Eli tuossa while-aikana olisi mahdollista syöttää uusi odotusaika tai 'pause' komento mikä jäädyttää loopin, tai 'exit' mikä lopettaa sen.
Pääohjelmani muodostuu esimerkin mukaisesti, ja while-looppi intervalli n. 5min. Jos on myös ehdotus millä saan absoluuttisen tarkasti tuon toteutumaan 5min välein, niin senkin voisin ottaa vastaan, vaikka ihan mielenkiinnosta miten se tehtäisiin.
Koodi:from datetime import datetime def main(): transfer_interval = 300 while(True): startinseconds = datetime.now().timestamp() #... #datan siirtoa netin yli, taulukoiden yhdistämistä, kestää ~10sec normaalisti #koodirivejä ~60 #... sleep_time = transfer_interval-(datetime.now().timestamp() - startinseconds) time.sleep(sleep_time)
Säikeiden käyttöön liittyy paljon kikkoja ja rajoituksia. Pythonissa on kuitenkin vakiona tkinter-framework, joka varsinaisesti on tarkoitettu graafisen käyttöliittymän tekemiseen. Sen ytimenä olevaa tapahtumalooppia voi tässäkin hyödyntää:
Python:
import tkinter as tk
root = tk.Tk()
root.title("tämä on vain hassu esimerkki")
seconds = 10
running = False
def task():
# tämä on toistettava tehtävä
print("Täällä taas: intervalli nyt", seconds)
root.after(1000 * seconds, task)
def start():
global running, seconds
# tässä konfiguroidaan
s = input("Intervalli sekunteina? ")
if s.isdecimal(): seconds = int(s)
if not running:
running = True
task()
button = tk.Button(root, text="Toistuvaistyön\nkäynnistys",
font="Calibri 24 bold", command=start)
button.pack(padx=100, pady=100)
tk.mainloop()
Viimeksi muokattu: