časované upomínky – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

časované upomínky – Python – Fórum – Programujte.comčasované upomínky – Python – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Fonadius0
Návštěvník
17. 8. 2008   #1
-
0
-

Zdravím,
snažím se udělat si program, který by mohl fungovat, jako úkolníček. A potřeboval bych aby aby třeba každou hodinu zkontroloval databázi s úkoly a zjistil si jestli má něco připomenout...
Mě napadlo dělat to pomocí vláken, jedno bude pořád spuštěné a bude kontrolovat databázi a druhé se vždycky spustí když bude potřeba něco připomenou a vytvoří vyskakovací okno s připomínkou.
Takže zatim jsem vytvořil asi takovouhle konstrukci.

import threading

import time
import sys

def kontrolor():
while 1:
print 'kontroluji databazi'
#print vlakno2.isAlive()
if not(vlakno2.isAlive()):
vlakno2.start()
time.sleep(0.2)

def upominka():
print 'referat - kinetika'
#v realnem programu bude samozrejme slozitejsi, tohle bych asi ani nepotreboval davat do samostatneho vlakna..
sys.exit()

vlakno1 = threading.Thread(target = kontrolor)
vlakno2 = threading.Thread(target = upominka)
vlakno1.start()

Problém je že mi to jednak moc nechce fungovat (jestli jsem to dobře pochopil tak interpretu vadí, že vlákno2 už je spuštěné, což je díky té kontrole isAlive() nesmysl a když si to vyprintuju tak po to taky tvrdí, že už nejede). Tohle mi to vyhodí:
>>> kontroluji databazi
referat - kinetika
kontroluji databazi
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Program Files\Python24\lib\threading.py", line 442, in __bootstrap
self.run()
File "C:\Program Files\Python24\lib\threading.py", line 422, in run
self.__target(*self.__args, **self.__kwargs)
File "C:\Users\Fonadius\AppData\Local\Temp\B3247626.py", line 10, in kontrolor

vlakno2.start()
File "C:\Program Files\Python24\lib\threading.py", line 410, in start
assert not self.__started, "thread already started"
AssertionError: thread already started

Moc díky za každou pomoc, i kdybych to měl udělat úplně jinak, osobně mi to nepřijde jako nijak úžasný řešení, ale nic jiného jsem nevymyslel a na internetu jsem nic nenašel..

Nahlásit jako SPAM
IP: 212.80.64.–
Nevěřte moc firmám, které slibují komplexní řešení vašich problémů. Komplexní řešení z pravidla mívají netriviální imaginární část.
Reklama
Reklama
Spectator0
Věrný člen
18. 8. 2008   #2
-
0
-

co to kojntrolování po hodině zkusit funkcí v Tkinteru => after() ta funguje celkem jednoduše a řekl bych i dostatečně pro jednoduché úlohy.

Nahlásit jako SPAM
IP: 89.176.230.–
. . .
Blujacker
~ Moderátor
0
Grafoman
19. 8. 2008   #3
-
0
-

Doporučuji použít funkci start_new_thread ve který bude nekonečná smyčka na jejímž začátku zkontroluješ, zda je nějaká nová upomínka a pak smyčku "pozastavíš" pomocí time.sleep



import thread, time
def fce():
while 1:
print "ahoj..."
time.sleep(2)
thread.start_new_thread(fce, ())

To by mělo fungovat

Nahlásit jako SPAM
IP: 70.253.203.–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Fonadius0
Návštěvník
19. 8. 2008   #4
-
0
-

To Spectator: No jednak bych to nechtěl dělat zrovan v Tkinteru, i když wxPython něco takového má taky.. Ale hlavně mi přijde zbytečné dělat to celé jako okení aplikací, když by stejně asi byla celou dobu skrytá v tray a jenom cca 3-krát denně by vyskočilo nějáké okno..
To Blujacker: Moc díky

Nahlásit jako SPAM
IP: 212.80.64.–
Nevěřte moc firmám, které slibují komplexní řešení vašich problémů. Komplexní řešení z pravidla mívají netriviální imaginární část.
Spectator0
Věrný člen
19. 8. 2008   #5
-
0
-

To Fonadius : Kdo mluví o okenní aplikaci? Pouze navrhuji použít fci after() ta po určitém čase spouští jakoukoliv :smile19: fci

Nahlásit jako SPAM
IP: 82.150.166.–
. . .
Fonadius0
Návštěvník
19. 8. 2008   #6
-
0
-

To Spectator : Promiň, špatně jsem tě pochopil, respektive viděl jsem slovo Tkinter a už jsem čekal viditelný widget v okení aplikaci.. Taky moc díky, jeste uvidím, co se mi bude víc líbit.. :smile1:

Nahlásit jako SPAM
IP: 212.80.64.–
Nevěřte moc firmám, které slibují komplexní řešení vašich problémů. Komplexní řešení z pravidla mívají netriviální imaginární část.
pawlik0
Grafoman
19. 8. 2008   #7
-
0
-

To Fonadius : no thready jsou většinou čistější řešení. ale ne vždy jednodušší. ale je to na tobě.

Nahlásit jako SPAM
IP: 84.42.151.–
Sa Nata A Na. Howgh
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý