İçindekiler
Birden çok işlem, sunucu ve çeşitli istekler dünyasına girdiğimiz zaman, çeşitli türde yanıtlar veya davranışlar olduğunu bilmeliyiz. senkron ve asenkron.Birincisi, kuyruklar, fifo, lifo vb. teorisine göre bir isteğe hizmet etmekten ibarettir. Yani işlem bitene kadar diğerine gitmez, bu davranışı gören bir program için sorun olmaz. İş Parçacığı birkaç tane üretebileceğinden İş Parçacığı belirli işlevlere hizmet eden her istek için.
Ardından, bir ile hizmet vermemize yardımcı olan asenkron bir aynı Konu durumlarına bağlı olarak birkaç istek, böylece biri bir şeyi işlerken birkaç istek yürütülürse, bir sonrakine katılabiliriz veya belki de bir isteğin müşteriye veri göndermesini beklememeliyiz:
Resimde gördüğümüz gibi, iletilecek bir mesaj gelene kadar gözden geçirildiği bir sohbet işleminin simülasyonu yapılır.
Asenkron Giriş ve Çıkış İşlemleri
İstemci isteklerinin asenkron bir okumasını yaptığımızda, başlangıçta mesajın tamamını okumamız gerekli değildir, ancak işlem hızı sayesinde yavaş yavaş görebiliriz.
Asenkron çalışma için piton Bize yardımcı olabilecek iki işlevimiz var, biri Seçme ve diğeri anket, bunlardan ikincisi yalnızca ortamlar için kullanılabilir UNIX, yani çok platformlu bir program yapmak istiyorsak bir sınır koymamız bir koşul olabilir, ancak en iyi ölçeklenen çözüm bu, bu yüzden bu detayları dikkate almalıyız.
NS fonksiyon seç isteğe bağlı olan ve aşağıdakileri içeren dördüncü bir argümanla birlikte, gerekli argümanlar olarak 3 diziyi alır zaman aşımı Saniye cinsinden, diziler bekleyeceğimiz bağlantılardır, 3 tanesi aşağıdakilere karşılık gelir: giriş, çıkış, istisnai koşullar (hatalar, istisnalar, vb.).
bir belirtmezsek zaman aşımı, işlev Seçme dizilerden biri harekete hazır olana kadar bekleyecektir, aksi takdirde bir zaman aşımı belirtirsek, bloklar karşılık gelen süreyi bekleyecektir. İşlev tarafından döndürülen değerler, her dizinin aktif bir alt kümesini temsil eder, örneğin döndürülen ilk dizi, okuyacağımız bir şeyin olacağı bir giriş dizisi olacaktır.
Aşağıdaki kod örneğini kullanarak bir sunucunun nasıl uygulanacağını görelim. fonksiyon seç:
soketi içe aktarın, seçin s = socket.socket () host = socket.gethostname () port = 1234 s.bind ((host, port)) s.listen (5) girişler = [s] iken True: [b] rs, ws, es = select.select (girişler, [], []) r'de r için [/ b]: r s ise: c, addr = s.accept () yazdır 'Bağlantı var', adres girdileri.append (c) başka: deneyin: veri = r.recv (1024) bağlantısı kesildi = socket.error dışında veri değil: bağlantı kesildi = Bağlantı kesildiyse doğru: yazdır r.getpeername (), 'bağlantı kesildi' girdileri.remove (r) başka: veri yazdır
Gördüğümüz gibi, aradığımızda fonksiyon seç 3 zorunlu diziyi geçerek değişkeni geçiyoruz girdilerBu, sunucunun 1234 numaralı TCP bağlantı noktasını dinlerken yakaladığıyla bağlantılıdır, ardından bilgileri göstermek için yineleniriz.
Gördüğümüz gibi, uygulamanın bu yönü oldukça basittir ve programı yaparken yaratıcılığımızın sınırı olacaktır.Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.