Python Uyku İşlevi: Koda Gecikmeler Nasıl Eklenir?

Yayınlanan: 2022-12-01

Bu öğretici, koda zaman gecikmeleri eklemek için Python'un yerleşik zaman modülünden uyku() işlevini nasıl kullanacağınızı öğretecektir.

Basit bir Python programı çalıştırdığınızda, kod yürütme herhangi bir zaman gecikmesi olmadan sırayla —bir ifadeden diğerine— gerçekleşir. Ancak, bazı durumlarda kodun yürütülmesini geciktirmeniz gerekebilir. Python yerleşik zaman modülündeki sleep() işlevi, bunu yapmanıza yardımcı olur.

Bu öğreticide, Python'da sleep() işlevini kullanmanın sözdizimini ve nasıl çalıştığını anlamak için birkaç örnek öğreneceksiniz. Başlayalım!

Python time.sleep() söz dizimi

Python standart kitaplığında yerleşik olan time modülü, zamanla ilgili birkaç yararlı işlev sağlar. İlk adım olarak, time modülünü çalışma ortamınıza aktarın:

 import time

sleep() işlevi time modülünün bir parçası olduğundan, artık ona aşağıdaki genel sözdizimiyle erişebilir ve kullanabilirsiniz:

 time.sleep(n)

Burada n , uyumak için geçen saniye sayısıdır. Bir tamsayı veya kayan noktalı bir sayı olabilir.

Bazen gerekli gecikme birkaç milisaniye olabilir. Bu durumlarda, milisaniye cinsinden süreyi saniyeye çevirebilir ve uyku işlevi çağrısında kullanabilirsiniz. Örneğin, 100 milisaniyelik bir gecikme eklemek istiyorsanız, bunu 0,1 saniye olarak belirtebilirsiniz: time.sleep(0.1) .

time modülünden yalnızca sleep işlevini de içe aktarabilirsiniz:

 from time import sleep

İçe aktarma için yukarıdaki yöntemi kullanırsanız, sleep() işlevini time.sleep() kullanmadan doğrudan çağırabilirsiniz.

Python sleep() işlevinin sözdizimini öğrendiğinize göre, işlevi çalışırken görmek için örnekleri kodlayalım. Bu eğitimde kullanılan Python betiklerini bu GitHub deposundaki python-sleep klasöründen indirebilirsiniz.

uyku() ile Gecikmeli Kod Yürütme

İlk örnek olarak, basit bir Python programının yürütülmesini geciktirmek için uyku işlevini kullanalım.

Gecikmeli Kod Yürütme

Aşağıdaki kod parçacığında:

  • İlk print() ifadesi herhangi bir gecikme olmaksızın yürütülür.
  • Ardından, sleep() işlevini kullanarak 5 saniyelik bir gecikme uygularız.
  • İkinci print() ifadesi, yalnızca uyku işlemi tamamlandıktan sonra yürütülür.
 # /python-sleep/simple_example.py import time print("Print now") time.sleep(5) print("Print after sleeping for 5 seconds")

Şimdi simple_example.py dosyasını çalıştırın ve çıktıyı gözlemleyin:

 $ python3 simple_example.py
Youtube videosu

Bir Kod Bloğuna Farklı Gecikmeler Ekleme

Önceki örnekte, iki print() ifadesinin yürütülmesi arasına 5 saniyelik sabit bir gecikme koyduk. Daha sonra, bir yinelemede döngü yaparken farklı gecikme sürelerini tanıtmak için başka bir örnek kodlayalım.

Bu örnekte, aşağıdakileri yapmak istiyoruz:

  • Bir cümlede dolaşın, her kelimeye erişin ve yazdırın.
  • Her kelimeyi yazdırdıktan sonra, cümledeki bir sonraki kelimeyi yazdırmadan önce belirli bir süre beklemek isteriz.

Bir Dize Dizisinde Döngü Yapmak

Dizeyi düşünün, sentence . Her kelimenin kendi içinde bir dize olduğu bir dizedir.

Dize boyunca döngü yaparsak, gösterildiği gibi her karakteri alırız:

 >>> sentence = "How long will this take?" >>> for char in sentence: ... print(char) # Output (truncated for readability) H o w . . . t a k e ?

Ama bizim istediğimiz bu değil. Cümle içinde döngü yapmak ve her kelimeye erişmek istiyoruz. Bunu yapmak için sentence dizgisi üzerinde split() metodunu çağırabiliriz. Bu, tüm boşluk oluşumlarında sentence dizesini bölerek elde edilen dizelerin bir listesini döndürür.

 >>> sentence.split() ['How', 'long', 'will', 'this', 'take?'] >>> for word in sentence.split(): ... print(word) # Output How long will this take?

Farklı Gecikmelerle Yinelenebilirler Arasında Döngü Yapma

Örneği tekrar gözden geçirelim:

  • sentence , her bir kelimeye erişmek için içinden geçmek istediğimiz dizedir.
  • delay_times , döngüden her geçişte sleep() işlevine bağımsız değişken olarak kullanacağımız gecikme sürelerinin listesidir.

Burada aynı anda iki liste arasında döngü yapmak istiyoruz: delay_times listesi ve sentence dizesini bölerek elde edilen diziler listesi. Bu paralel yinelemeyi gerçekleştirmek için zip() işlevini kullanabilirsiniz.

Python zip() İşlevi : zip(list1, list2), her demetin list1 ve list2'deki i dizinindeki öğeyi içerdiği bir demet yineleyicisi döndürür.

 # /python-sleep/delay_times.py import time sleep_times = [3,4,1.5,2,0.75] sentence = "How long will this take?" for sleep_time,word in zip(sleep_times,sentence.split()): print(word) time.sleep(sleep_time)

Uyku işlevi olmadan, kontrol hemen bir sonraki yinelemeye geçer. Gecikme eklediğimiz için, döngüden bir sonraki geçiş ancak uyku işlemi tamamlandıktan sonra gerçekleşir.

Şimdi delay_times.py çalıştırın ve çıktıyı gözlemleyin:

 $ python3 delay_times.py

Dizedeki sonraki kelimeler bir gecikmeden sonra yazdırılacaktır. Dizedeki i dizinindeki sözcüğü yazdırdıktan sonraki gecikme, delay_times listesindeki i dizinindeki sayıdır.

Youtube videosu

Python'da Geri Sayım Sayacı

Sıradaki örnek olarak, Python'da basit bir geri sayım sayacı kodlayalım.

Python'da Geri Sayım Sayacı

Bir fonksiyon tanımlayalım countDown() :

 # /python-sleep/countdown.py import time def countDown(n): for i in range(n,-1,-1): if i==0: print("Ready to go!") else: print(i) time.sleep(1)

Ardından, countDown() işlevinin tanımını inceleyelim:

  • İşlev, bağımsız değişken olarak bir n sayısını alır ve bu n sayısından başlayarak sıfıra kadar geri sayım yapar.
  • Sayımlar arasında bir saniyelik bir gecikme elde etmek için time.sleep(1) kullanıyoruz.
  • Sayı 0'a ulaştığında, fonksiyon "Gitmeye hazır!" çıktısını verir.

Geri sayım işlemini gerçekleştirmek için, negatif adım değeri -1 olan range() işlevini kullandık. range(n, -1, -1) n, n – 1, n – 2 gibi sayı aralığında sıfıra kadar döngü yapmamıza yardımcı olur. range() işlevi kullanılırken bitiş noktasının varsayılan olarak hariç tutulduğunu hatırlayın.

Şimdi, argüman olarak 5 olan countDown() işlevine bir çağrı ekleyelim.

 countDown(5)

Şimdi countdown.py betiğini çalıştırın ve countDown işlevini çalışırken görün!

 $ python3 countdown.py
Youtube videosu

Multithreading'de Uyku İşlevi

Python iş parçacığı modülü, kullanıma hazır çoklu iş parçacığı yetenekleri sunar. Python'da Global Interpreter Lock veya GIL, herhangi bir zamanda yalnızca bir aktif iş parçacığının çalışmasını sağlar.

piton-uyku-3

Ancak, G/Ç işlemleri ve uyku gibi bekleme işlemleri sırasında işlemci mevcut iş parçacığının yürütülmesini askıya alabilir ve bekleyen başka bir iş parçacığına geçebilir.

Bunun nasıl çalıştığını anlamak için bir örnek verelim.

Python'da Konu Oluşturma ve Çalıştırma

Şu işlevleri göz önünde bulundurun, func1() , func2() ve func3() . Bir dizi sayı arasında dolaşırlar ve bunları yazdırırlar. Bunu, döngüden her geçişte belirli sayıda saniye için bir uyku işlemi izler. Yürütmenin eş zamanlı olarak iş parçacıkları arasında nasıl geçiş yaptığını daha iyi anlamak için işlevlerin her biri için farklı gecikme süreleri kullandık.

 import time def func1(): for i in range(5): print(f"Running t1, print {i}.") time.sleep(2) def func2(): for i in range(5): print(f"Running t2, print {i}.") time.sleep(1) def func3(): for i in range(4): print(f"Running t3, print {i}.") time.sleep(0.5)

Python'da, bir thread nesnesini başlatmak için Thread() yapıcısını kullanabilirsiniz. threading.Thread(target = …, args = …) sözdizimini kullanarak, args demetinde belirtilen bağımsız değişkenle target işlevi çalıştıran bir iş parçacığı oluşturur.

Bu örnekte func1 , func2 ve func3 işlevleri herhangi bir bağımsız değişken almaz. Bu nedenle, hedef olarak yalnızca işlevin adını belirtmek yeterlidir. Daha sonra sırasıyla hedef olarak func1 , func2 ve func3 ile t1 , t2 ve t3 thread nesnelerini tanımlarız.

 t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) t3 = threading.Thread(target=func3) t1.start() t2.start() t3.start()

İşte iş parçacığı örneği için tam kod:

 # /python-sleep/threads.py import time import threading def func1(): for i in range(5): print(f"Running t1, print {i}.") time.sleep(2) def func2(): for i in range(5): print(f"Running t2, print {i}.") time.sleep(1) def func3(): for i in range(4): print(f"Running t3, print {i}.") time.sleep(0.5) t1 = threading.Thread(target=func1) t2 = threading.Thread(target=func2) t3 = threading.Thread(target=func3) t1.start() t2.start() t3.start()

Çıktıyı gözlemleyin. Yürütme, üç iş parçacığı arasında değişir. t3 iş parçacığı en düşük bekleme süresine sahiptir, bu nedenle en az süre için askıya alınır. t1 iş parçacığı iki saniyelik en uzun uyku süresine sahiptir, dolayısıyla yürütmeyi bitiren son iş parçacığıdır.

Youtube videosu

Daha fazlasını öğrenmek için Python'da çoklu iş parçacığı kullanımının temelleri hakkındaki öğreticiyi okuyun.

Çözüm

Bu öğreticide, koda zaman gecikmeleri eklemek için Python'un sleep() işlevini nasıl kullanacağınızı öğrendiniz.

sleep() işlevine yerleşik zaman modülü time.sleep() 'ten erişebilirsiniz. Yürütmeyi n saniye geciktirmek için time.sleep(n) kullanın. Ayrıca, bir döngüde sonraki yinelemeleri farklı değerler, geri sayım ve çoklu iş parçacığı ile geciktirmenin örneklerini gördünüz.

Artık zaman modülünün daha gelişmiş özelliklerini keşfedebilirsiniz. Python'da tarih ve saatlerle çalışmak ister misiniz? Saat modülüne ek olarak, tarih saat ve takvim modüllerinin işlevlerinden yararlanabilirsiniz.

Ardından, Python'da zaman farkını hesaplamayı öğrenin.