Python Source Geç Açlıyor Sorun Nedir

Arkadaşlar elimde bir python ile yazılmış source var visual stdio code ile çalıstırıyorum üzerinde değişiklikler yaptığımda olmuş mu olmamıs mı diye bakmak için sağ üstten run python file yapıyorum ama çok geç açılıyor run verdiğim zaman 20 saniyeyi geçiyor buda çok can sıkıcı hale gelmeye başladı bunu hızlı açmamın bir yolu var mı

Merhaba, geç açılma sebebi kod ile alakalı da olabilir. Kodu görmemiz mümkün müdür?

tabi ki kod derken komple py dosyasını mı paylaşayım

Kodunuz bu kadar büyükse mesela 300 satırdan fazlaysa onu artık parçalara bölmenizin vakti gelmiş demektir.

Kodunuzu farklı modüllere ayırın. Aynı işleve yarayan fonksiyon ve sınıfları aynı dosya içine koyun. Her dosyanın sonuna kendi testlerini yazın. Böylece bütün kodları çalıştırmadan kodları test etmiş olursunuz. Bu durumda yaptığınız hataları bulmak ve düzenlemek istediğiniz fonksiyonları bulmak daha da kolaylaşır ve tam da sizin istediğiniz gibi her şey hızlanır.

5 sene önce bir satranç oyunu yazmıştım. Geçen sene bir mektepli bunu gördüğünde 900 satırı tek dosyada yazdığım için dalga geçmişti. İşte o zaman parçalayarak yazmam gerektiğini anladım.

Bu olayın üzerinden biraz zaman geçtikten sonra pythonda dinamik olarak svg oluşturmak için bir proje geliştirmeye başladım. Her ne kadar yarım kalmış olsa da konsepti anlatmak için yeterli bir repo. (Belki de bitmiştir. Hatırlamıyorum.)

1 Beğeni

Tümünü paylaşabilirsiniz, ama satır sayısı çok fazla ise, paylaşmanız gereken kısmı(çalışma süresini uzattığını düşündüğüz parça vs.) paylaşın. Bu arada @hasser 'in dediklerine katılıyorum.

2800 satır sourcem benim

2800 satır toplamda source

Buna startup time kaynaklı diyebiliriz.

2800 satır kod olması bu hızı ciddi şekilde etkilemez.

Tek dosyada 2800 satır kodun tek mahsuru. Programlama kültüründe 300-500 satır koddan sonra kod okunamaz ve yönetilemez hale gelir. Doğru tasarlanmış programlamlarda 300-400 satırlara gelindiğinde artık, farklı işlevleri yerine getiren bölümlerin faklı dosya ve modüllere atılma ve ayıklanma zamanı gelmiş demektir.

Yada kodlarınızın artık, sınıf olmaya aday tekrarlanan satırları artmıştır ve bu sınıfları kodun içinden seçip oluşturup başka yerlerde tutmaya başlamayı düşünme zamanınız gelmiş demektir.

Python kodu zaten satır satır işletmek üzere tasarlanmıştır. Satır sayınızın ne olduğu , istisna sistem limitleri hariç pek derdi olan konu değildir.

Dönelim baştaki konu ve sizin sorununuza, batşlatma zamanı gecikmelerine genelde yüklediğiniz, modül ve kütüphaneler sebep olur.

Hepsini modülünüzün başında tanımlarsanız, ki bu okunurluk için iyidir ama, mümkün olduğunca kodunuzu bölüp, ihtiyaç duyulduğunda kütüphaneleri tanımlarsanız biraz faydasını görebilirsiniz.

Örneklemek gerekirse, arayüz ile internet haberleşme kodlarınızı farklı dosyalarda tanımlar ve modüllerinizi de gerektiği yerde import ederseniz, her şeyi en başta import etmeye uğraşmamış ve başlama zamanının uzamasını bir nebze engellemiş olursunuz. Her ne kadar bir modül import edildikten sonra ikinci kez import edilmeyecek şekilde çalışır mekanizma ama yine de dikkatli bir şekilde birden fazla kez aynı modülü import etmediğinize de dikkat etmek iyi bir alışkanlıktır.

Bir başka sorun, kullandığınız kütüphaneler hantal ve ağır yükleniyor olabilir. Bunların yeni sürümlerinde yeni performans iyileştirmeleri sağlanmış olabilir. Bu nedenle import ettiğiniz kütüphanelerin yeni versiyonlarını kontrol edin varsa güncelleyin.

Buna rağmen yavaş bir kütüphane var ise, alternatiflerini aramanız ve kodunuzun bu kütüphanelerle ilgili kısımlarını yeniden yazmayı da düşünebilirsiniz.

Son olarak, vs node ne tür bir hata denetimi sağlıyor, debug konusunda nasıl davranıyor test etmemekle beraber, kodunuzu, doğrudan, terminal/komut satırı/ konsol üzerinden çalıştırmayı deneyin eğer burada hız farklı ise node ile ilgili bir gecikme de olabilir. Eğer öyle ise editörün tavsiye sayfalarını inceleyip bazı ayarları değiştirmeyi düşünebilirsiniz.

Startup time ile alakalı literatür taraması yapın. Farklı öneriler de bulabilirsiniz. Örnek şu makaleye göz atabilirsiniz.

How to speed up Python application startup time - DEV Community

Size startup performansı ile ilgili farklı bir bakış açısı da sunuyor. Son zamanlarda hintliler yerine japonlar da bu işlere kafa yormaya başlamış ilginç ama benzer konularda makaleler size yardımcı olabilir.

Eğer import ettiğiniz kütüphaneleri de paylaşırsanız belki o kütüphanelerin alternatiflerini de arayabilir, yada hangisinin olağan şüpheli olduğunu konuşabiliriz.

Mesela en basitinden qt5 arayüz kütüphanesi bile startup zamanını gereksiz uzatıyor, bunun yerine daha hafif bir arayüz kütüphanesi kullanmayı şiddetle tavsiye edebilirim. Ama bunlar için import ettiğiniz kütüphaneleri makaledeki gibi test edip size en uzun bekleme yaptıranları tespit etmeye başlamalısınız.

Kolay gelsin.

Selam butun soruyu noktalama isareti kullanmadan noktasiz virgulsuz yazmissin tek nefeste acele acele soyleyen biri imaji yaratiyor ve okurken nefessiz kaliyorum resmen belki bu bakmak veya duzeltmek istedigin bir sey olabilir neyse konuya gelince 20 saniyeyi gecen sey nedir kodun calismasya baslamasi mi yoksa calismasinin bitmesi mi bos veya sadece bir printten olusan kodu calistirinca da ayni yavaslik oluyor mu oluyorsa sikinti visual studio code’dadir onun disinda problem kodunda da olabilir tabi koda bakmak lazim tamamini yollarsan bakabiliriz eger fazla uzun diye veya baska bir nedenden oturu tamamini yapistirmak istemiyorsan sorunu iceren daha ufak bir parcasini da paylasabilirsin ama su anda bir sey soylememiz mumkun degil yani vscode’da hizli ac opsiyonu gibi bir sey yok olsaydi hazir isaretli gelirdi zaten ayrica cogu kodu acmasi 20 saniyeyi bulsaydi kimse o programi yayinlamazdi yani problem buyuk ihtimalle kodunda kodunu gormeden bir sey soyleyemiyoruz

sorunu çözdüm. Sorun python dosyasının içinde bir key sitesi vardı Sourcemi her açtığımda oluşturmuş olduğum key ile giriyordum siteden doğrulayıp doğrulamaması geç sürüyor diye düşündüm. Key sitesini iptal edince çok hızlı açılmaya başladı py dosyam. Açılması 20 35 saniyeyi geçen bir py dosyam şuan 2 veya 3 saniyede açılıyor

hocam merhaba
konuyla alakasız fakat, genel olarak sınıf oluşturmak bu şekilde mi işliyor? yani en baştan “hadi şu işi yapan bir class yazalım” gibi değil de, “bu kısım çok uzadı, birbirine benzeyen bir sürü şey oldu, bunu bir class haline getirelim” şeklinde mi oluyor? clean code yazmaya özen gösteriyorum da, tecrübesizlikten hala tam karar veremiyorum bu tip konularda. kusura bakmayın umarım kendimi açıklayabilmişimdir. uzun bir mesai günü oldu da benim için.

Merhaba,

Bence gayet alakalı sormuşsunuz.

Ben genellemelere karşıyım :slight_smile:

Projeye göre değişir. Kullandığınız dile göre değişir. Yapmak istediğinize göre değişir.

Sınıf ve nesneler ile temiz kod yazmak. İkisi de sayfalarca makale yapılabilecek konular.

Bir kaç soru ile başlayalım.

Neden clean code yazmak ister bir insan?

Hangi proje başlangıçta alındığı kararlara sadık kalınarak bitirilr?

Her mesai uzundur. Umarım doğru anlayabiliyoruzdur.

Sonuç olarak;

Projenin boyutu, projenin kodlandığı dil esastır sınıfları tasarlamak için. Zaman içinde proje farklı yönlere gelişir ve dallanır.

Dallanmaya başladığında sizin başta planladığınızdan farklı şekilde gelişmeye başlar bu gelişimde sizin başta tasarladığınız sınıflardan farklı sınıflara ihtiyaç duyurabileceği gibi, mevcut sınıflar üzerinden miras alarak farklı nitelikler katacağınız farklı sınıflara ihtiyaç duyurabilir.

Yani proje “genelde” başladığı gibi biterse genelde başta tasarladığınız sınıflarla sonuçlanabilir ama “genelde” projeler asla başta başladığı gibi ilerlemez ve sonlanmaz bu durumda sınıflar sınıfları doğurur, farklı hatalar farklı hata kontrol rutinleri gerektirir, kapsam değiştikçe başta ortak düşündüğünüz bazı rutinleri ayırmak ayrı ayrı kontrol etmek isteyebilrsiniz.

NYP de tavsiye, nesneleri bulup çıkarmaktır sanatı bu nesneleri keşfetmektir ve bu keşif hiç bitmez, proje yönetimi ve yazılım döngüsü konusunda ise döngü şu şekildedir.

Biraz kod yazar, hataları düzeltir ilerlersiniz, sonra tekrar yazar tekrar hataları kontrol edersiniz bu genişleyen sprilral bir merdiven gibidir ve yazılımı maintain ettiğiniz sürece bu devam eder.

Aradan bir süre geçtikten sonra bazı rutinlerinizi beğenmez değiştirirsiniz bu rutinler size yeni sorunlar çıkartabilir, artık bazı sınıflarınız bölünmesi gereken ve başka rutinlerin çağırdığı başka alt sınıflara evrilir ve bunun bir sonu yoktur.

Clean kod konusunda ve sınıflar konusunda şunu söyleyebilirim. Planlamak iyiir ama en uzun seyahat bile ilk adımla başlar.

Yani kodu belli bir seviyede planlamak iyidir ama planlama aşamasında takılı kalmamak gerekir. Kodunuzu önce çalışır hale getirin sonra clean code mantığı ile yeniden gözden geçirin. Baştan clean code yazmaya çalışmak iyidiir ama clean ama çalışmayan bir kod yada yarım proje iyi değildir.

Açıkcası temiz kod yazmak ayrı bir gayret gerektirmez bir alışkanlıktır. Siz bu alışkanlığı kazanırsanız, zaten ilerlerken kendiliğinden ortaya çıkar, proje tamamlandığında dönüp hızlıca kalitesini daha da artırabilirsiniz.

Sınıflar konusunda ise proje öncesi planlamalarınıza rağmen her şeyi ön göremezsiniz. Hem clean kod yazmak, hem de tekrar eden kısımları proje sonunda görebileceğinizden sınıflarınız zaten kendiliğinden oluşacaktır. Yani programa yapısal başlayıp, çıkan fonksiyonları sonrasında sınıflarına göndermek de bir yöntem olabiir.

Ama kodun en başında ben her sınıfımı planladım, buna göre kodlarım diye katı kuralla başlayamazsınız. Kelimenin tam anlamıyla projeye başlayamazsınız.

Kolay gelsin.

1 Beğeni

çok teşekkürler epey açıklayıcı oldu. size de kolay gelsin.

Ikisi de olur.

Siniflar biraz daha onden tasarlanmaya megilli (meyilli?) seyler. Constructor’dan destructor’a kadar korumak istediginiz bir invariant, ic isleyisini saklamak istediginiz bir arayuz varsa sinif yaziyorsunuz. Ha, tabi kodun karmasik kismina bakip, “buraya biz cozum lazim” deyip, sonra o cozumu orada onden tasarlayabilirsiniz.

Fonksiyonlar nazaran daha “anin gaziyla” yazilabilen seyler. Hatta “ayni X satir Y’den kere fazla tekrar ediliyorsa fonksiyona cevrilmeli” gibi otomatik, tasarimdan uzak kurallar sonucunda bile yaratilabilirler. Zaten dusunurseniz class’in yapitaslari, ufak bir parcalari.

“Hala” derken, 10-15 seneyi buldu mu?
“Tam” karar verememek cok normal; bir suru ve birbirleriyle celisen parametreler dahilinde yaziliyor cogu kod.
Ama bi 5-10 seneden sonra bir takim kolay karar mekanizmalarinin oturmus olmasini beklemek yanlis degil.

1 Beğeni

1.5 sene kadar oldu sanırım. elimden geldiğince iyi yazmaya çalışıyorum ama sanırım bazı temelleri tam oturtamadığımdan bir şeyler eksik gibi geliyor sanki. sürekli daha iyi yazılabilir bunu düzeltmem gerek diyorum.