Şu eğitimden: Python için Programlama Kavramları

Yoklama

- Bir olayın meydana geldiğini tespit etmek ve ardından belirli bir eylemi gerçekleştirerek bu olaya tepki vermek için bir programa ihtiyaç duyduğunuz zamanlar olacaktır. Bunu başarmak için kullanabileceğiniz iki yaklaşım vardır: yoklama veya olay odaklı programlama. Yoklama yöntemiyle, bir program sürekli olarak kontrol eder, kontrol eder ve kontrol eder ve bir düğmeye basılması gibi belirli bir koşulun oluşup oluşmadığını kontrol eder ve aktif olarak kontrol eder ve koşulun oluştuğunu gördüğünde, uygun bir eylem gerçekleştirir. Evim arkadaşlarım için hazır, bu yüzden şimdi sadece pizza kuryesinin buraya gelmesini bekliyorum. Pizzacı geldiğinde, kapıyı açıp pizzayı alarak uygun eylemi gerçekleştirmem gerekecek. Peki pizzacının pizzamı almak için ön verandada olduğunu nasıl bileceğim? Pekala, yoklama yöntemini deneyebilirim ve bunu yapmak için yatağımdan kalkmam gerekecek. Sonra merdivenlerden iniyorum. (kapı tıklamaları) Burada olup olmadığını kontrol ediyorum, henüz değil. (kapı tıklamaları) Sonra merdivenlerden tekrar yukarı çıkıyorum ve sonra uzanmaya geri dönüyorum, ama tekrar uzanır yatmaz, hemen tekrar yukarı çıkmam ve burada olup olmadığını kontrol etmem gerekiyor. Tekrar merdivenlerden iniyorum. (kapı tıklamaları) Hayır, hala burada değil. (kapı tıklamaları) Merdivenlerden tekrar çıkıyorum, uzanıyorum, ayağa kalkıyorum, başka bir zaman merdivenlerden iniyorum, henüz değil. (kapı tıklamaları) Tekrar yukarı, aşağı, yukarı, tekrar aşağı. (kapı tıklamaları) Hayır ve tekrar merdivenlerden yukarı çıkın. Vay canına, bu çok yorucu! Gördüğünüz gibi yoklama çok verimli bir yöntem değil. Bu merdivenlerden yukarı ve aşağı koşmak, nadiren meydana gelen bir durumu kontrol etmek benim için çok fazla enerji harcıyor. Ayrıca Cumartesi öğleden sonramda başka bir şey yapmamı da engelliyor. Bir yoklama rutini uygulayan bir bilgisayar uygulaması, nadiren meydana gelen durumu kontrol etmek için çok sayıda döngü kullanır ve C gibi bir dile sahip bir mikrodenetleyici için yazabileceğiniz gibi basit, düşük seviyeli programlar, yazılım güdümlü G/Ç yapmak için yoklama kullanmak tamamen kabul edilebilir olabilir. Mikrodenetleyici üzerinde çalışan tek şey programsa, çok fazla döngü yoklaması yapmamızın bir önemi yoktur. Python veya Java gibi daha üst düzey uygulamalar ve diller genellikle olaylara grafiksel bir kullanıcı arabirimi gibi şeylerden yanıt verir. Bunun için bir anket rutini kullanmak oldukça israf edici olacaktır, ancak anket yapmanın tek seçeneğiniz olduğu zamanlar olabilir. Şimdi Python'da yoklama uygulayan bazı örnek kodlara bakalım. Bu örnek komut dosyası, pizza teslimatçısının gelip gelmediğini görmek için merdivenlerden inip çıktığımda az önce gördüğümüz senaryoyu temsil ediyor. Komut dosyasının üst kısmına yakın bir yerde, 3. satırda hungry adında bir değişken oluşturuyoruz, bu da mevcut durumumu gösterir ve aç olduğum için True olarak başlatılır. Bu yüzden pizzaya ihtiyacım var. Bundan sonra, program 5. satırda bir süre döngüsüne girer ve bu, aç hala doğru olduğu sürece sürekli olarak yürütülür. Döngünün içinde, front_door.txt adlı bir metin dosyasını açarak simüle ettiğimiz ön kapıyı açıyorum. open işlevi, 7. satırdaki front door değişken adına bağlı bir dosya nesnesi döndürür. Alıştırma dosyalarının aynı dizininde bulunan bu metin dosyasına hızlıca bir göz atalım. Bu dosya, ön kapımın dışında olan şeyleri içeriyor. Şu anda bir karşılama minderim ve bir kapı zili var, ama ne yazık ki pizza teslimatçısı yok. Metin dosyasını açtıktan sonra komut dosyasına geri dönüp bakıldığında, 9. satırdaki if ifadesi, dize teslim eden kişinin söz konusu front_door metin dosyasında var olup olmadığını kontrol eder. Eğer öyleyse, o zaman pizzanın burada olduğunu ilan eden bir sevinç çığlığı atıyorum ve açlığı False'a ayarlıyorum. Ancak, teslimat görevlisi ön kapıda değilse, o zaman çok aç bir sesle "Henüz değil ..." Bundan sonra, 16. satırdaki dosya nesnesini kapatarak simüle edilen ön kapıyı kapatarak döngüyü tamamlayacağım. Pizza geldiyse ve artık aç değilsem, kapıyı kapattıktan sonra while döngüsü çıkacaktır. Aksi takdirde, daha önce gördüğümüz gibi, ben kontrol etmeye devam ettikçe while döngüsü tekrar tekrar ve tekrar ve tekrar yürütülecektir. Şimdi bu betiği front_door metin dosyasını bulabilmesi için yaşadığı dizinin içinden çalıştırmak için, VS Code içindeki üst dizinine sağ tıklayacağım, açık ve entegre terminal seçeneğini seçeceğim ve ardından betiği çalıştırmak için Python'u çağıracağım. While döngüsünün, pizzanın gelip gelmediğini kontrol etmek için olabildiğince hızlı bir şekilde tekrar tekrar çalıştığını görebiliriz. Bu rutin durmadan çalıştığı için, temelde sadece pizzacının aşağıda olup olmadığını kontrol etmek için tüm bir işlemci çekirdeğini harcıyoruz ki bu çok verimli değil. front_door metin dosyasını içinde teslimat görevlisi olacak şekilde değiştirerek o pizza görevlisinin gelmesini sağlayabiliriz. Bu değişiklik dosyaya kaydedilir kaydedilmez, yoklama yordamı değişikliklerin geldiğini görür. Pizzanın burada olduğunu ve while döngüsünün bitip çıkacağını duyuracağım. Bu örnek, bir yoklama yordamı uygulamak için neden serbest çalışan bir while döngüsü kullanmamanız gerektiğini gösterir. Bir yoklama rutini oluşturduğunuzda, döngüye kesintisiz çalışmasını önlemek için bir tür gecikme mekanizması eklemek genellikle iyi bir fikirdir, bu da CPU kaynaklarını boşa harcayabilir ve diğer şeylerin çalışmasını engelleyebilir veya en azından onları yavaşlatabilir. Python'da bunu, betiğimizin üst kısmındaki zaman modülünü içe aktararak yapabiliriz. Daha sonra bu while döngüsünün en sonuna time.sleep fonksiyonunu ekleyeceğiz. Bu, programın o satıra geldiğinde bir saniye beklemesine neden olacaktır. Ön kapıyı kapattıktan sonra, tekrar kontrol etmeden önce bir saniye dinleneceğim. Şimdi, bu betiği çalıştırmadan önce, pizza teslimatçısını front_door metin dosyasından kaldıralım, ardından bu betiği terminal içinden tekrar yürütmek için Python'u çağıralım. Sadece çıktıya bakıldığında tamamen açık değil, ancak şimdi while döngüsü tam hızda durmadan çalışmıyor. Sadece pizzacının saniyede bir gelip gelmediğini kontrol ediyor ve bunu yaparak CPU'yu bunaltmıyoruz. Çalışmasının nedeni, uyku işlevinin, programın normal CPU döngülerini boşa harcamayacak şekilde uyumasına izin veren kesme adı verilen bir mekanizma kullanması ve ardından yürütmeye devam etmek için bir saniye sonra uyanmasıdır.

İçerikler