SORU
3 EYLÜL 2014, ÇARŞAMBA


Nerede Python'prosedür belgelenen s?

CPython kapatma sırasında Hiçbiri modülleri ayarlar burada garip bir davranışı var. Bu kadar hata yazdım bazı çoklu kod kapatma sırasında günlük vidalar.

Bu davranış herhangi bir belge bulamadım. PEP 432 geçen bahsediyor:

[...] önemli ölçüde "None break döngüleri kasıtlı ve girişimi bültenleri için daha fazla dış kaynakları temiz bir şekilde kullanılan" davranış. set modül yaşayacaksınız modülleri sayısını azaltarak

SO questions about this behaviour C API documentation mentions shutdown behaviour for embedded interpreters vardır.

Ayrıca related thread on python-dev related CPython bug: buldum

Bu yama modül davranışını değiştirmez nesneleri kendi bütünsel sözlük en kısa sürede temizlenmesi kaldırıldı.

Bu belgelenmiş bir davranış mı? 2 özel Python mi?

CEVAP
3 EYLÜL 2014, ÇARŞAMBA


Davranıştırdeğiliyi belgelenmiş ve 1.5-ish hakkında Python sürümleri mevcutturPython 3.4 kadar:

Bu değişimin bir parçası olarak, modül bütünsel artık zorla çoğu durumda tercüman kapatma sırasında None set yerine döngüsel çöp toplayıcı normal çalışmasını güveniyor.

Davranışları için tek belge moduleobject.c source code

/* To make the execution order of destructors for global
   objects a bit more predictable, we first zap all objects
   whose name starts with a single underscore, before we clear
   the entire dictionary.  We zap them by replacing them with
   None, rather than deleting them from the dictionary, to
   avoid rehashing the dictionary (to some extent). */

Not Bu ayar değerleri None optimizasyon; alternatif olurdu silmek adlarını eşleme, götürecek farklı bir hata (NameError istisnalar yerine AttributeErrorler ne zaman kullanmak istiyor bütünsel bir __del__ handler).

Dışarı mailinglist üzerinde bulunduğu gibi, davranış Halkalı çöp toplayıcı öncedir; Halkalı çöp toplayıcı added in 2000 23 olurken,**,. İşlevi nesneleri her zaman modülü __dict__ başvuru yılından bir modülde tüm işlev nesneleri GC önce __dict__ gerekli temizleme oyun haline geldi bu yüzden döngüsel başvurular içerir.

Siklik GC __del__ yöntemleri döngüleri dahil olan nesneler olabilir çünkü eklendi bile yerde tutuldu. aren't otherwise garbage-collectable ve sözlük en azından modülü kaldırmak istiyorsunuz modülünü temizleme bu 11* *böyle olmalıdır. Öyle bir şey olmayacaktümBu modül başvurulan global yaşıyor.

Değişiklikleri PEP 442 için yapılmış şimdi çöp toplayıcı __del__ bir sonlandırıcı sağlayan nesneler ile döngüsel başvuruları temizlemek için mümkün, modülü __dict__ temizlemek için gereken kaldırma yapmakçoğu durumda. Kodu still there ama bu sadece tetikleyen __dict__ öznitelik hala yaşıyor sonra bile hareketli içindekiler sys.modules zayıf başvuru ve başlangıç GC collection çalıştırıldığında yorumlayıcı kapatıyor; modülü sonlandırıcı sadece azaltır kendi başvuru sayısı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cristina Landa

    Cristina Lan

    28 Ocak 2010
  • fufko

    fufko

    27 ŞUBAT 2006
  • hotstrikegently

    hotstrikegen

    26 AĞUSTOS 2011