İşlemci yönetimi

Bir projede kullanıcı girişi yapılacak. Kullanıcının aktif olup olmadığını görmek için ve aynı anda başka kullanıcının aynı şifre ile giriş yapmaması için bir çözüm bulmaya çalışıyorum. Fakat çözümden önce kullanıcı giriş yapmış olsa dahi herhangi bir sunucuya belirli aralıklarla “buradayım” gibisinden bir ifade göndermesi gerektiği aşikar ve kaçılınılmaz gözüküyor. Böyle bir durumda örneğin her 10 fln saniyede gidecek veriyi programın durmaması için threading ile yapacağım. Threading ile while döngüsü kullanıp yapacağım. Fakat biliyoırusnuz ki while işlemciyi çok fazla kullanabiliyor. Bu durumda pyqt5 kütüphanesinden QTimeri kullanmayı düşünüyorum. Debug yardımıyla ile hiç çalışmadığım için hangisinin daha çok işlemci kullandığını anlayamıyorum. Mümkünse debugu değilse hangisinin daha çok işemci kullandığını söylermisiniz ?
Şimdiden teşekkürler…

sqlite kullanabiliriz en basitinden. Zaten kullanıcı verilerini saklamanız gerekeceği için veritabanı lazım.

Kullanıcıyı kayıt etmek için veritabanını kuracağız. 3 bilgi içerecek. username, userpass, online

Kullanıcı veri tabanına kayıt olacağı zaman program kullanıcı adı ve şifreyi aldıktan sonra otomatik olarak online kısmına 0 değerlini ekleyecek.

Online değeri bizim kullanıcının aktif olup olmadığını kontrol etmemize olanak sağlayacak. 0 ise offline 1 ise online

Kullanıcı programa başarılı bir şekilde giriş yapması için 3 faktör değerlendirilecek bunlar da 2 şekilde olacak. Birinci işlem kullanıcının adı ve şifresini doğrulamakta. Eğer doğru ise sonra online kontrolüne girecek. Online değeri 0 ise kullanıcı programa giriş yapacak ve online += 1 olarak online değeri 0 yerine 1 olacak. Böylelikle kullanıcının programda aktif olarak dolaştığını bilebiliriz.

Başarılı bir kullanıcı adı ve şifre girişi yaptıktan sonra eğer online değeri 1 ise kullanıcıya uyarı verilecek. Eğer yeni kullanıcı programa girmek için toplamda 3 defa giriş yapmaya çalışırsa aktif olan hesabın online değerini 0 a çevirip giriş yapmasına olanak sağlayabiliriz.

online değerinde 0 ve 1 olarak kontroller yaptığımız zaman bize sunacağı çok güzel bir özellik de akla geliyor.

Örneğin çok yüksek kullanıcılı bir programınız var ve kaç kişinin o an aktif olduğunu öğrenmek istiyorsunuz. database den online sütununu çekip toplarsınız ve size anlık online bilgisini de vermiş olur. Hatta bunu programın bir köşesine sabitleyerek de güzel bir bilgi görünümü oluşturulabilir.

Bilmiyoruz? Bu ne demek?

Olabilir.

Debug yardimi nedir?

Hangisinin daha cok islemci kullandigini anlayamiyorsan aralarinda bir fark yoktur? Anlasilamayan fark neden onemli?

Soyleyemeyiz cunku ortada islemci kullanacak islemler butunu yok. Iki tane soyut fikir var.

Orn: Bir seyi yaziyla mi anlatmak daha hizlidir, sozle mi?

3 Beğeni

While işlemci her iş gördüğünde çalışan komut bloğudur.

az miktarda while kullanacaksan zaten farkedemezsin pek ama program bir arayüze sahipse her butona basmada dahi 1 2 saniye gecikme yaşayacaktır. Buda kullanıcı etkileşimi açısından oldukça kötü bir durumdur

Orası sorun değil klasik veri tabanı bağlantısı fakat veritabanından clientlere bir bilgi yollanmayacak. Bu durumda kullanıcının sistemi aniden çökse bile programda yanında gideceği için 1 değeri 0 olmayacak bu durumda kullanıcı birdahaki giriş denemesinde olumsuz sonuç alacak. Bunun önüne geçebilmek için kullanıcının 10 saniyede bir güncel saatini göndermesini sağlayıp eğer son gönderilen saat 10 saniye önce ise kullanıcı programı kullanıyor demek böylece başka bir yerde aynı şifre ile girilemeyecek. Benim asıl istediğim bu 10 saniyede bir tekrarlanan işlemleri ne ile yapacağımı bulmak

1 Beğeni

Benim bildigim while, programlama dillerinde kontrol akisini degistirip sartli dongu haline getiren bir yapi.

Islemci cok dusuk seviyede. Is gormesi nedir? Instruction execution’dan bahsediyorsak bildigim islemci mimarilerinin hic birinde while’a benzeyen bir instruction yok. En yaklasan x86’daki loop sanirim, while (cx > 0) yapiyor olmasi lazim.

1-2 saniye bir islemci icin az miktar degil.

Yuksek seviye programlama dili kullanip dusuk seviye dusunmeye calismaktan dogan bir problem oldugunu dusunuyorum: While’i az/cok miktarda kullanmanin soz konusu olmamasi lazim, bahsedilen kod bir-iki tane while ile yazilabilir.


Tekrarliyorum: olcumden bahsedebilmek icin olculebilecek seyleri ortaya koymak gerekiyor.

1 Beğeni

emin ol hiç yardımcı olmuyorsun

Gördüğüm kadarıyla @aib üstadın amacı sizlere doğru yolu göstermek ve yanlış/eksik bilinenleri düzeltmek. Sizin yerinizde olsam, yeterli zamanım olsa, @aib üstadın yazdığı herşeyi bıkmadan, sıkılmadan, şikayet etmeden okur ve anlamaya çalışırdım. Bu toplulukta @aib gibi bir üyenin bulunması büyük bir şans. Bence bu şansı iyi değerlendirin.

7 Beğeni

Yardimci olmadigimi biliyorum. Yardimci olabilecegimden de emin degilim. Tek amacim bu soruyu/sorunu/seni herhangi birinin yardimci olabilecegi bir konuma getirmek. O birini bulup yardimi almak sonraki asamalar.

3 Beğeni

While olmayan kodlar da işlemciyi çok fazla kullanabiliyor, bunun while ile doğrudan alakası yok. Kodun ne yaptığı ile alakası var.

Bence de onu kullanın.

Şu şekilde bir threading kullanımı ile doğru bir QTimer kullanımı arasında önemli bir performans değişimi olmayacaktır:

from threading import Thread
from time import sleep

def buradayım():
    while True:
        buradayım_mesajı_gönder()
        sleep(10)

thread = Thread(target = buradayım)
thread.start()

Ama PyQt (hatta çoğu arayüz kütüphanesi) ile birlikte threading kullanmamak daha iyi. Kütüphaneler bundan hoşlanmayabiliyor.

Eğer amacınız gerçekten performansı doğru bir şekilde ölçmek ise Qt/PyQt ve CPython’un kaynak kodlarını inceleyip denemeler yapmanız gerekebilir.

1 Beğeni