Bu derste, programınızın yürütülmesine gecikme eklemenizi sağlayan Python fonksiyonu sleep() hakkında bilgi edineceksiniz. Bu, özellikle programınız iş parçacıklarıyla çalışırken veya grafikler ve animasyonlarla uğraşırken kullanışlı bir fonksiyondur. sleep fonksiyonu, zamana erişim ve dönüşümlerle ilgili birçok başka fonksiyon içeren time modülü içinde yer alır. Bu modül her platformda bulunsa da içindeki tüm fonksiyonlar her yerde mevcut olmayabilir veya tam olarak aynı şekilde çalışmayabilir. Gelin time.sleep() modülüne biraz daha yakından bakalım...
Time Modülü
Bu modül, zamanı yönetmenize ve programınızda kullanmanıza yardımcı olan fonksiyonlar sağlar. Sisteminizde tarih ve takvimle daha hassas çalışan başka "akraba" modüller de vardır, ancak bu modül daha çok zamanı yönetmeye odaklanır — saatlerle çalışmaktan milisaniyelere kadar iner.
Bilgisayar bilimi dünyasında zamanla çalışırken genellikle duyacağınız terimlerden biri epochtur.
Ancak önce, time modülünü içe aktardığınızdan emin olun. Bunu yapmak için şunu yazmanız yeterlidir:
Bu, zamanın gerçekten başladığı kesin noktadır. Bu, güneş sistemimizin doğuşu ya da insanların zamanı ölçmeye başlaması anlamına gelmez; aslında zamana daha yakın bir noktadır. UNIX sistemi için epoch, 1 Ocak 1970, 00:00:00 (UTC)’dir (merak ediyorsanız Perşembe gününe denk geliyordu...) Sisteminizdeki epoch’u öğrenmek için şunu yazabilirsiniz:
Bu size yıl (tm_year), ay (tm_mon), gün (tm_mday), saat (tm_hour), dakika (tm_min) ve saniyeyi (tm_sec) söyler. Ayrıca haftanın günü (tm_wday) — bu değer 3’tür, çünkü haftanın başlangıcı Pazartesi kabul edilir ve 0 olarak sayılır. Ardından yılın günü (tm_yday), diğer adıyla Jülyen gün gelir. Son olarak yaz saati uygulaması bayrağı (tm_isdst) — DST, yaz saati uygulaması anlamına gelir. Bu alanın değerleri 0, -1 veya 1 olabilir. 0, yaz saati uygulaması geçerli değilse; 1, geçerliyse; -1 ise bilginin mevcut olmadığı durumdadır. Neden mevcut olmayabilir diye sorarsanız: Çünkü DST kuralları yerel yasalarla belirlenir ve değişebilir.
Çoğu bilgisayar saat ve tarihi, 1 Ocak 1970, 00:00:00 (UTC) tarihi ile saklanacak zaman arasındaki saniye farkı olarak depolar. Dolayısıyla şunu yazarsanız:
Bu size 1 Ocak 1970, 00:00:00 (UTC) tarihinden bu yana geçen saniyeleri söyler. Bu farka zaman damgası ya da UNIX epoch zamanı deriz ve kayan noktalı bir sayı şeklindedir. Gerçi... dürüst olmak gerekirse fark saniye cinsinden değil, tik denen şey cinsindendir. Çoğu UNIX sisteminde saat saniyede 50 ila 100 kez "tik" eder. Yani UNIX epoch zamanı aslında 1 Ocak 1970, 00:00:00 UTC’den bu yana gerçekleşen tik sayısıdır.
Artık time modülünün ne yaptığına dair bir fikriniz olduğuna göre, sleep() fonksiyonuna bakalım.
time.sleep()
Basitçe, time.sleep() fonksiyonu argüman olarak, programın bir sonraki adıma geçmeden önce duraklatılmasını istediğiniz saniye sayısını alır. Bunu basit bir programla görelim: Geçerli zamanı yazdırıp her bir yürütme arasında 5 saniyelik bir duraklama veriyoruz — böylece geçerli zamanın her yazdırılışı arasında 5 saniyelik bir fark oluşuyor. time.ctime() kullanmak yerel zamanı düzgün biçimlendirilmiş bir sürümde görmeye yardımcı olur.
for count inrange(5):print(time.ctime())# Prints the current time with a five second difference
time.sleep(5)Altyapı:
Sun Jan 2718:46:242019
Sun Jan 2718:46:292019
Sun Jan 2718:46:342019
Sun Jan 2718:46:392019
Sun Jan 2718:46:442019Altyapı:
Fonksiyonun söz dizimi: time.sleep(sec); burada sec, programın askıya alınacağı saniye sayısını belirten argümandır. Fonksiyon herhangi bir değer döndürmez.
sec — Argüman aslında bir kayan noktalı sayıdır; bu nedenle uyku süresini daha hassas ayarlayabilirsiniz. Ancak bu biraz kuşkuludur; çünkü gerçek askıya alma süresi talep edilenden daha kısa veya keyfi olarak daha uzun olabilir. Nedenini daha iyi anlamak için, programı bir mağazada farklı bir satış temsilcisinin ele aldığı bir sorun ya da görev gibi düşünün — programı askıya aldığınızda üzerinde çalışan kişi hemen başka bir müşteriye atanır. Ama kısa süre sonra (belirtilen uyku saniyelerinden daha erken) boşta olan başka bir satış temsilcisi görevi devralır ve tamamlar — dolayısıyla askı süresi daha kısa olabilir. Benzer şekilde, mağazadaki tüm satış temsilcileri için görev planlaması nedeniyle askı süresi talep edilenden keyfi bir miktar daha uzun olabilir ve program sırasını beklemek zorunda kalır. Elbette bu, içeride daha karmaşıktır ve bunu yönetmek için birçok yöntem çoktan geliştirilmiştir.
for count inrange(3):print(time.ctime())# Prints the current time with a five second difference
time.sleep(2.5)Altyapı:
Sun Jan 2718:46:492019
Sun Jan 2718:46:522019
Sun Jan 2718:46:542019Altyapı:
Python, özellikle platformlar arası olmak üzere bu fonksiyon çağrılarının davranışı hakkında hiçbir garanti vermez. Bunun temel nedeni, bu modülde tanımlanan fonksiyonların çoğunun aynı adlı platform C kütüphanesi fonksiyonlarını çağırmasıdır. Doğruluk, esasen altındaki işletim sisteminin uyku (sleep) doğruluğuna bağlıdır ve daha fazla incelemek isterseniz — bu fonksiyonların anlamları platformlar arasında değiştiği için platform dokümantasyonuna bakmanız yararlı olacaktır.
Yine de güzel bir haber var: Python 3.5 sürümünden itibaren, time.sleep(secs) bir sinyal tarafından kesilse bile (yine, yukarıda bahsedilen satış temsilcisi gibi düşünebilirsiniz) işleyici bir istisna fırlatmadığı sürece artık en az secs (geçilen argüman) kadar uyur.
Peki, time.sleep() kullanırken içeride neler olur? Bu bölüm, fonksiyonu daha iyi anlamanıza yöneliktir; fonksiyonu kullanmaya başlamanız için zorunlu değildir. Fonksiyon aslında, bilgisayardaki tüm dahili bileşenleri senkronize eden ve işlemcinin bir parçası olan sabit, yüksek frekanslı bir sinyal üreten elektronik bir aygıt olan Sistem Saatini kullanır. Bu modül, programlanabilir aralıklarla Interrupt Requests (IRQ) denen kesme istekleri üretir. IRQ’lar, işlemcinin yürüttüğü mevcut kodu kesmekten, mevcut durumu kaydetmekten ve denetimi işletim sistemindeki başka bir kod parçasına devretmekten sorumludur. Dolayısıyla sleep() fonksiyonunun yaptığı şey, süreci bloke etmek için altta yatan G/Ç tamamlama rutinini veya eşzamansız prosedür çağrısını tetiklemektir. İşletim sistemi, bir zaman aşımı süresi dolana kadar başka bir şey yapmak istemediğinizi not eder. Bu zaman aşımı süresi dolduğunda, işletim sistemi sürecinizi hatırladığı son durumdan itibaren sürdürür. Sizin bakış açınızdan ise sadece time.sleep() fonksiyonuna basit bir çağrı yapılmış olur.
time.sleep() fonksiyonunu öğrenmiş olmanızdan ötürü tebrikler. Python’daki fonksiyonlar hakkında daha fazla bilgi edinmek için DataCamp’in Python Data Science Toolbox (Bölüm 1) kursuna mutlaka göz atın.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Bu derste, programınızın yürütülmesine gecikme eklemenizi sağlayan Python fonksiyonu
sleep()hakkında bilgi edineceksiniz. Bu, özellikle programınız iş parçacıklarıyla çalışırken veya grafikler ve animasyonlarla uğraşırken kullanışlı bir fonksiyondur. sleep fonksiyonu, zamana erişim ve dönüşümlerle ilgili birçok başka fonksiyon içerentimemodülü içinde yer alır. Bu modül her platformda bulunsa da içindeki tüm fonksiyonlar her yerde mevcut olmayabilir veya tam olarak aynı şekilde çalışmayabilir. Gelintime.sleep()modülüne biraz daha yakından bakalım...Time Modülü
Bu modül, zamanı yönetmenize ve programınızda kullanmanıza yardımcı olan fonksiyonlar sağlar. Sisteminizde tarih ve takvimle daha hassas çalışan başka "akraba" modüller de vardır, ancak bu modül daha çok zamanı yönetmeye odaklanır — saatlerle çalışmaktan milisaniyelere kadar iner.
Bilgisayar bilimi dünyasında zamanla çalışırken genellikle duyacağınız terimlerden biri epochtur.
Ancak önce, time modülünü içe aktardığınızdan emin olun. Bunu yapmak için şunu yazmanız yeterlidir:
epoch
Bu, zamanın gerçekten başladığı kesin noktadır. Bu, güneş sistemimizin doğuşu ya da insanların zamanı ölçmeye başlaması anlamına gelmez; aslında zamana daha yakın bir noktadır. UNIX sistemi için epoch, 1 Ocak 1970, 00:00:00 (UTC)’dir (merak ediyorsanız Perşembe gününe denk geliyordu...) Sisteminizdeki epoch’u öğrenmek için şunu yazabilirsiniz:
Bu size yıl (tm_year), ay (tm_mon), gün (tm_mday), saat (tm_hour), dakika (tm_min) ve saniyeyi (tm_sec) söyler. Ayrıca haftanın günü (tm_wday) — bu değer 3’tür, çünkü haftanın başlangıcı Pazartesi kabul edilir ve 0 olarak sayılır. Ardından yılın günü (tm_yday), diğer adıyla Jülyen gün gelir. Son olarak yaz saati uygulaması bayrağı (tm_isdst) — DST, yaz saati uygulaması anlamına gelir. Bu alanın değerleri 0, -1 veya 1 olabilir. 0, yaz saati uygulaması geçerli değilse; 1, geçerliyse; -1 ise bilginin mevcut olmadığı durumdadır. Neden mevcut olmayabilir diye sorarsanız: Çünkü DST kuralları yerel yasalarla belirlenir ve değişebilir.
Çoğu bilgisayar saat ve tarihi, 1 Ocak 1970, 00:00:00 (UTC) tarihi ile saklanacak zaman arasındaki saniye farkı olarak depolar. Dolayısıyla şunu yazarsanız:
Bu size 1 Ocak 1970, 00:00:00 (UTC) tarihinden bu yana geçen saniyeleri söyler. Bu farka zaman damgası ya da UNIX epoch zamanı deriz ve kayan noktalı bir sayı şeklindedir. Gerçi... dürüst olmak gerekirse fark saniye cinsinden değil, tik denen şey cinsindendir. Çoğu UNIX sisteminde saat saniyede 50 ila 100 kez "tik" eder. Yani UNIX epoch zamanı aslında 1 Ocak 1970, 00:00:00 UTC’den bu yana gerçekleşen tik sayısıdır.
Artık time modülünün ne yaptığına dair bir fikriniz olduğuna göre,
sleep()fonksiyonuna bakalım.time.sleep()
Basitçe,
time.sleep()fonksiyonu argüman olarak, programın bir sonraki adıma geçmeden önce duraklatılmasını istediğiniz saniye sayısını alır. Bunu basit bir programla görelim: Geçerli zamanı yazdırıp her bir yürütme arasında 5 saniyelik bir duraklama veriyoruz — böylece geçerli zamanın her yazdırılışı arasında 5 saniyelik bir fark oluşuyor.time.ctime()kullanmak yerel zamanı düzgün biçimlendirilmiş bir sürümde görmeye yardımcı olur.Fonksiyonun söz dizimi:
time.sleep(sec); burada sec, programın askıya alınacağı saniye sayısını belirten argümandır. Fonksiyon herhangi bir değer döndürmez.sec — Argüman aslında bir kayan noktalı sayıdır; bu nedenle uyku süresini daha hassas ayarlayabilirsiniz. Ancak bu biraz kuşkuludur; çünkü gerçek askıya alma süresi talep edilenden daha kısa veya keyfi olarak daha uzun olabilir. Nedenini daha iyi anlamak için, programı bir mağazada farklı bir satış temsilcisinin ele aldığı bir sorun ya da görev gibi düşünün — programı askıya aldığınızda üzerinde çalışan kişi hemen başka bir müşteriye atanır. Ama kısa süre sonra (belirtilen uyku saniyelerinden daha erken) boşta olan başka bir satış temsilcisi görevi devralır ve tamamlar — dolayısıyla askı süresi daha kısa olabilir. Benzer şekilde, mağazadaki tüm satış temsilcileri için görev planlaması nedeniyle askı süresi talep edilenden keyfi bir miktar daha uzun olabilir ve program sırasını beklemek zorunda kalır. Elbette bu, içeride daha karmaşıktır ve bunu yönetmek için birçok yöntem çoktan geliştirilmiştir.
Python, özellikle platformlar arası olmak üzere bu fonksiyon çağrılarının davranışı hakkında hiçbir garanti vermez. Bunun temel nedeni, bu modülde tanımlanan fonksiyonların çoğunun aynı adlı platform C kütüphanesi fonksiyonlarını çağırmasıdır. Doğruluk, esasen altındaki işletim sisteminin uyku (sleep) doğruluğuna bağlıdır ve daha fazla incelemek isterseniz — bu fonksiyonların anlamları platformlar arasında değiştiği için platform dokümantasyonuna bakmanız yararlı olacaktır.
Yine de güzel bir haber var: Python 3.5 sürümünden itibaren,
time.sleep(secs)bir sinyal tarafından kesilse bile (yine, yukarıda bahsedilen satış temsilcisi gibi düşünebilirsiniz) işleyici bir istisna fırlatmadığı sürece artık en az secs (geçilen argüman) kadar uyur.Peki,
time.sleep()kullanırken içeride neler olur?Bu bölüm, fonksiyonu daha iyi anlamanıza yöneliktir; fonksiyonu kullanmaya başlamanız için zorunlu değildir. Fonksiyon aslında, bilgisayardaki tüm dahili bileşenleri senkronize eden ve işlemcinin bir parçası olan sabit, yüksek frekanslı bir sinyal üreten elektronik bir aygıt olan Sistem Saatini kullanır. Bu modül, programlanabilir aralıklarla Interrupt Requests (IRQ) denen kesme istekleri üretir. IRQ’lar, işlemcinin yürüttüğü mevcut kodu kesmekten, mevcut durumu kaydetmekten ve denetimi işletim sistemindeki başka bir kod parçasına devretmekten sorumludur.
Dolayısıyla sleep() fonksiyonunun yaptığı şey, süreci bloke etmek için altta yatan G/Ç tamamlama rutinini veya eşzamansız prosedür çağrısını tetiklemektir. İşletim sistemi, bir zaman aşımı süresi dolana kadar başka bir şey yapmak istemediğinizi not eder. Bu zaman aşımı süresi dolduğunda, işletim sistemi sürecinizi hatırladığı son durumdan itibaren sürdürür. Sizin bakış açınızdan ise sadece
time.sleep()fonksiyonuna basit bir çağrı yapılmış olur.time.sleep()fonksiyonunu öğrenmiş olmanızdan ötürü tebrikler. Python’daki fonksiyonlar hakkında daha fazla bilgi edinmek için DataCamp’in Python Data Science Toolbox (Bölüm 1) kursuna mutlaka göz atın.