Python’da modülleri yeniden içe nasıl aktarırız?

Uzun süredir çalışan bir Python sunucum olsun ve sunucuyu yeniden başlatmadan bir dosyayı update etmek istediğimizi varsayalım.

Uzun süredir çalışan bir Python sunucum olsun ve sunucuyu yeniden başlatmadan bir dosyayı update etmek istediğimizi varsayalım. Bunu nasıl yapabiliriz? Örneğin Python’da modülleri içe aktarmanın tersi bir anahtar kelimemiz olsaydı (un-import gibi) aşağıdakini yapabilirdik:

if degisti_mi(foo.py):
    unimport foo  <-- bunu nasıl yapacağız?
    import foo
    myfoo = foo.Foo()

Importlib.reload() kullanarak zaten içe aktarılmış bir modülü yeniden yükleyebiliriz:

from importlib import reload  # Python 3.4+
import foo

while True:
    # bir takım işlemler.
    if degisti_mi(foo):
        foo = reload(foo)

Python 2’de yeniden yükleme yerleşik bir fonksiyondu. Python 3’te ise imp modülüne taşındı. Python 3.4’te importlib lehine kullanımdan kaldırıldı. 3 veya sonraki bir sonraki sürümler için reload çağırırken uygun bir modüle başvurmanız gerekir.

Django sunucusu gibi Web sunucuları bu yöntemi kullanır, böylece sunucu işleminin kendisini yeniden başlatılmadan kod değişikliklerinizin etkilerini görebilirsiniz.

Belgelerden alıntı yaparsak:

  • Python modülünün kodu yeniden derlenir ve modül düzeyi kodu yeniden yürütülür. Modül sözlüğündeki adlara bağlı yeni bir nesne kümesi tanımlanarak modülü ilk yükleyen yükleyiciyi yeniden kullanır. Uzantı modüllerinin init işlevi ikinci kez çağrılmaz.
  • Python’daki diğer tüm nesnelerde olduğu gibi, eski nesneler yalnızca başvuru sayıları sıfıra düştükten sonra geri kazanılır.
  • Modül ad alanındaki isimler, yeni veya değiştirilmiş nesnelere işaret etmek için güncellenir.
  • Eski nesnelere yapılan diğer başvurular (modül dışındaki adlar gibi) yeni nesnelere başvurmak için geri alınmaz ve istenirse oluştukları her ad alanında güncelleştirilmelidir.

Sorumuzda olduğu gibi, Foo objelerini eğer Foo sınıfı foo modülündeyse yeniden yapılandırmamız gerekir.

Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Yazı, Python

Okumaya devam et!

Python’da bir sınıf objesi JSON ile nasıl serialize edilir?

En kolay yol toJSON() metodunu implement etmek olacaktır: .

Python Lambda ne için kullanılır?

Lambda ifadelerinden bahsediyoruz: Lambda ifadeleri aslında oldukça faydalı.

String Metotları

String nesneleri değişmezdir, yani bir listenin yapabildiği gibi yerinde değiştirilemezler.

Python’da Koleksiyon Türleri

Python’da bir dizi koleksiyon türüne sahibiz.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.