Python - Etkileşimli Program Kullanmak

Anlamadım. Programların otomatik çalışması ne demek? Programlar normalde nasıl çalışıyor?

Evet bazı programlar döngülerle çalışır. Ama burada ne kastettiniz? Otomatik çalışan programlarınız sıra ile bir döngü şeklinde mi çalışıyor? Yoksa otomatik çalışan programlarınızın içinde for, while vs gibi döngüler mi var?

Program çalışırken durmasını istersem programı kapatmam gerekiyor ne demek? İşletm sistemleri hiç bir programı, program sonuna kadar asla durdurmaz.

Belki sistem servisleri durdurulabilir ama bu farklı bir konu. Bir program bir iş yapar ve durması için bir neden yoksa program sonuan kadar gider. Hiç bir iş yapmayan windows programları bile bir sistem boşta işlemi çevirir asla durmaz. Çünkü callback fonskiyonlar içerir ve gider ara ara mesaj kuyruğunu kontrol eder. Etmezse varsayımsal durdursanız dahi geri çalıştıramazsınız.

Döngünün içinde bir status/durm alıp eğer durum size göre durma ise bir boşta döngüsü içinde döndürmeniz bu arada mesaj kuyruğunu kontrol ettirmeniz ve tekrar başlama isteğiniz durumunda bir önceki döngünüzü yeniden çağırmasını sağlamalısınız.

Bunu bir çok şekilde yapabiliriz.

Ama belirgin bir tasarım olursa daha özel çözüm üretilebilir. Aksi halde teorik bir öneride bulunabiliriz.

Bu kadar bilinmeze rağmen tahmini teorik öneride bulunalım.

Elimizde otomatik programlarımız ve bunların içinde de döngülerimiz var.

Hiç bir döngü koşul sağlanana kadar kodun ilgili kısmını bırakmaz. İçerisinde çalışmaya devam eder.

Bu durumda o döngü içinde bir dışına çıkış koşulu koymak ve her döngüde kontrol etmek gerekir.

Döngü içindek kod işletilirken koşul değişirse döngünün dışına çıkış verilir.

Thread 'i durdurdunuz. Program durdurmaktan farkı ne oldu? Bu tartışmaya açık. Çünkü devam ettirdiğinizde kaldığı yerden devam edecektir, döngünün başına gelmeyecektir. Tabi bunu bir kod üzerinde detaylıca konuşmak gerekir.

Ben olsam, döngüsünün içinden çıkmak istediğim noktalarda bir hotkey tanımlar o hot key ile boş bir döngüye çeker o döngü de hiç bir işlem yapmadan sadece mesaj kuyruğunu dinler yeniden talep gelirse tekrar ilgili döngüyü çağırırdım.

Yani run terimi programlama için boşa söylenmemiştir. Programlar işletim sistemleri üzerinde koşturulur.

Koşturulan bir şey kolay kolay durdurulmaz. İstisnası, debug tooları üzerinde geçici olarak yapılır.

Ki o ayrı bir yaklaşım gerektirir.

Kesme/interrupt yaklaşımı ile de bir yere kadar;

Interrupt the Main Thread in Python (superfastpython.com)

Yani teori üzerinde her yöne gidebiliriz.

Burada asıl hedefi yakalayamadım.

Hedefi yakalarsak daha net çözüm önerilebilir?

Neden bir programı durdurmak istiyoruz?

Kaynak tüketimini sınırlamak için mi?

Çalışma koşullarını değiştirmek için mi?

Çalışma adımlarını gözlemlemek için mi?

Ne tür bir seçim?

Seçimi durdurmadan da yapabilir miyiz?

Mesela seçimlerimiz bir tamponda dursa, döngü tamponu çektiğinde yeni duruma göre devam edebilse mesela.

Evet haklısınız size göre detaylı ama bana göre detaylı değil.

Nedeni de şu, yukarıdaki sorularım nedeniyle açık noktalar var ve açık noktalar netleşmezse onlarca farklı varyasyonda çözümler oluşuyor.

Ama basit bir mantık hatası görüyorum. Programlar durdurulmak için koşturulmaz. Koşullar değişirse yeni duruma göre karar alabilir şekilde kodlanır. Kod bir şey yapmadan bekleme kararı almışsa aslında durmaz bir sistem boşta döngüsünde döner.

Bu da kimsenin suçu değil, işletim sisteminin tasarımından kaynaklıdır.

Yani asıl yapmak istediğinizi, yada neden yapamadığınızı, yada sizi neden durmaya zorlayacak bir karar aldırıyorsa iyi bir şekilde belirtirseniz alternatif çözümler azalır ve seçenekler daha da netleşir.

Sorunuzdaki mantıksızlığı (bu hakaret değil mantık hatasını belirginleştrime olarak düşünün.) şöyle anlatayım. Bir progamınız var. Programınız çalışıyor, durdurana kadar, işletim sistemi ile callback fonksiyonlarla sizin kodlarınız hariç haberleşir. Siz bir programı durdurursanız, bu haberleşmeyi de durdurursunuz. Peki duran bir program, nasıl olup da işletim sisteminden gelen devam et, çalış gibi komutları işleyecek?

Durdu işleyemez.

Artık onu haricen çalıştırmanız gerekir. Haricen çalıştırmak demek programın başlatılırken kontrolünü bir debuger a bırakmak ve sonra durduğundan onun adına mesajları dinlemesini ve tekrar çalıştırmasını istemek gibi bir yöntemdir ki bu sizin istediğiniz şey değildir diye düşünüyorum.

Yani tekrar söyleyim. Hiç bir program durmaz. Verilen fonksiyonlar dışında sadece sistem mesajlarını dinleyeceği bir döngüye çekilir.

Tabi bu döngü ile sizin döngüler arasındaki koordinasyonu da sizin main fonksiyonunuz sağlar.

Thread ile çözümde ise mekanizme programı durdurmaz, thread’i durdurur.

Yani üzerinde düşündükçe her yanında soru işaretleri oluşuyor.

Sıkıntı nedir? Neyi yapamadınız? Neyi hedeflediniz?

Bunları belirterek kodu durdurmaya iten yaklaşımınıza alternatfler üretebiliriz.

Aksi halde debuger kodu vermeye başlayacağım.

2 Beğeni