Sched modülünün sonuna bir örnek yazmıştım.(İstihza belgelerindeki) Bir döngüden bahsediyor o örnek. Eğer o döngüyü threading ile kullanırsanız bilgisayar açık olduğu sürece ayarladığınız işi yapar. Program kapansa bile.
Evet. Sadece basit bir Thread oluşturup başlatmaktan bahsediyorum.
Farklı bir Thread üzerinde yürümesi onu programdan bağımsız çalışıyor hâle getiriyor ama program üzerinden onu durdurabilirsiniz. Program kapatılırsa bilgisayar kapatılmadığı sürece yenilemeli fonksiyon olarak çalışmaya devam ediyor.
import sched
import threading
import time
# scheduler nesnesi oluşturalım
s = sched.scheduler(time.time, time.sleep)
# Yenilemeli fonksiyonumuz
def artır(x):
# Çalışıp çalışmadığını test etmek için bir dosyaya
# bir sayı yerleştirip sayıya her saniye 1 ekleyelim.
with open("sayılar.txt", "w") as file:
file.write(str(x))
# fonksiyonumuzu her çalıştığında tekrar çalıştıralım.
s.enter(1, 1, artır, argument=(x+1,))
s.enter(1, 1, artır, argument=(0,))
threading.Thread(target=s.run).start()
Kendi kendini çağıran fonksiyona denir.
Biraz abartmışım program kapatılınca bu işlem de kapanıyor. Ancak programın kapatılmasını engellerseniz(Sadece uzantısını .pyw yapın) çalışacağına inanıyorum. Ancak şu son dediğimi test etmedim.
Ozyinelemeli. Boyle bir anlamda kullanildigini tahmin ettim, fakat thread’lerle baglantisini kuramadim.
Spesifik olarak okumam gereken bir yeri var mi? Gecen sene okuyup kullanmaya calismistim –ilginc bi sekilde konuyla da ufaktan alakali olarak– birden fazla thread tarafindan kullanilamadigini fark ettim. Scheduler thread’i bir sonraki event’e kadar uyurken araya yeni bir event eklendiginde interrupt olamiyor. Olabilen soyle bir versiyonunu yazdim.
Windows’a spesifik terminal penceresi kapanmasiyla ilgili bir gorsellikten bahsediyorsunuz sanirim. Ben process’in kapanmasi ve thread’lerinin akibeti veya python interpreter’inin durmasi ve thread’lerinin akibetinden bahsediyorum.
Ilki icin isletim sistemi scheduler’i (sched modulu degil) nedir, nasil calisir bakabilirsiniz. (Cagdas isletim sistemlerinde hepsi asagi yukari ayni calisiyor.) Ikincisi icin threading’in dokumentasyonu ne kadar yeterli hatirlamiyorum fakat deneme-yanilmayla cok rahat incelenebiliyor, tavsiye ederim. Burada bahsettiginiz sey daemon parametresi olabilir.