gc.collect()
numaralı telefonu aradığımda bile çöp koleksiyonunun atlamayı reddettiği bir nesneyi el ile kaldırmanın herhangi bir yolu var mı? Python'da ÇalışmaPython'da manuel çöp toplama
cevap
, the docs Başına sadece arkadaşlar kalıcı olacak). Bundan sonra, bir şekilde siyah bir sanattır ;-). Sıklıkla bazı yönlendirenlerin listelendiğini görürsünüz (bu nedenle, thatobject
numaralı telefonu kastediyorsunuz? Yani acil durum modunda .remove
yapabilir, ancak normal kod sesini daha iyi hale getirebilirsiniz ...), ve hatta daha sık, dict
s (birçoğu, bir sınıf örneğinin veya başka birisinin __dict__
s'si olabilir, hangisinin hangisi olduğunu anlamak için genellikle önemsiz değildir ... kaba kuvvet kaldırma, bazen acil bir acil çözümdür, ancak hiçbir zaman uzun süreli sürdürülebilir bir çözüm değildir. ! -).
Python'unuzun üzerinde çalıştığı duruma bağlıdır. ayrıntıları aktaran
açıklıyor Here's good article: CPython güncel sürümlerde
, döngü içine x her yeni atama daha önce tahsis edilen kaynak yayınlayacak. GC kullanarak, bu garanti edilmez. Herhangi bir Python uygulamasıyla çalışacak bir kod yazmak isterseniz, kaynağı açıkça kapatmalısınız; Bu GC ne olursa olsun çalışır:
for name in big_list:
x = Resource()
do something with x
x.close()
GC onu yok etmeyi reddediyor ise, bir yerde bir referansı var çünkü bu kadar. Referansdan kurtulun ve (sonunda) gidecek. Örneğin:
myRef = None
o gerekmedikçe GC mutlaka senin nesne yok olabilir unutmayın. Nesneniz Python yönetimi altında olmayan kaynakları tutuyorsa (örneğin, Python'dan C koduyla bazı hileler), nesne bir kaynak serbest bırakma çağrısı sağlamalıdır, böylece Python karar verirken değil, istediğiniz zaman bunu yapabilirsiniz. .
del
Ya None
gc.get_referrers(thatobject)
nesne hala hayatta olmasının nedeni (size anlatmak emin istenmeyen "Canlılık" yapmak için doğru bir gc.collect()
sonra yapacak
>>> a = "Hello"
>>> a = None
Or
>>> del a
Mutlaka doğru değil. Nesnenin sadece yeniden elde edilebilmesi için ulaşılamaması (ya da birincisi ile çok umutlu bir şekilde kabul edeceği anlaşılır bir atılabilir ref-sayımı olması) gerekir. –
'del a' nesneyi silmez (sadece bir not; ima ettiğinizi ima etmeyiniz) – hasen
- 1. Statik üyelerin çöp toplama
- 2. Özürlü Çöp Toplama Bildirimleri
- 3. Çöp toplama, java
- 4. nodejs çöp toplama çıkışı
- 5. Çöp toplama ve yansıma
- 6. Çöp toplama ve saklama kutusu
- 7. Ruby Class nesne çöp toplama
- 8. javascript anonim işlev çöp toplama
- 9. newLISP çöp toplama kullanıyor mu?
- 10. C# çöp toplama nasıl azaltılabilir
- 11. Çöp Toplama yerel değişkeni kaldırmadı
- 12. yeni Konu() ve Çöp Toplama
- 13. Java 8 metaspace çöp toplama
- 14. v8 | çöp toplayıcısını manuel olarak başlat
- 15. İzole döngüsel referanslarla çöp toplama davranışı?
- 16. node js çöp toplama/bellek sorunları krom
- 17. Durdurulan Hizmet Sabit Çöp Toplama İşlemi Yapıyor
- 18. Çöp Toplama neden bu kadar yavaş?
- 19. Son derece uzun çöp toplama süreleri
- 20. Ruby'de çöp toplama profili nasıl yapılır
- 21. Ruby: Çöp toplama için bir nesneyi işaretleme
- 22. Arka plan işçi ve çöp toplama?
- 23. Mac'te Gitx Sierra: Objective-C çöp toplama artık desteklenmiyor
- 24. ReactiveUI bağlantıları, çöp toplama işleminin oluşmasını engelliyor gibi görünüyor.
- 25. CDI Uygulama ve Bağımlı kapsamlar çöp toplama etkisini etkileyebilir mi?
- 26. Bir IO eylemi yürütülürken bir liste toplama çöp kutusu
- 27. Android JNI yerel kod C++ nesneleri çöp toplama çağırmak mı?
- 28. Çöp Toplama, birden çok çalışan işlem/iş parçacığıyla nasıl çalışır?
- 29. Tam çöp toplama .NET 4.x'te nasıl zorlanır?
- 30. DotTrace Performance Profiler [Çöp toplama] ile ne ifade ediyor?
Python hakkında bir şeyler bilmezsiniz, ancak bazı çöp toplayıcıları, bazen nesnelerin hala kullanımda olduğunu düşünürler; çünkü bu nesnelerin (* aslında) olmadığı için * göründüklerini * bulurlar. Bu gibi durumlarda yapabileceğiniz pek bir şey yok. – Artelius
Ayrıca, Python 3.1 ASAP. 3.0 bir dizi bilinen problemlere sahiptir ve artık desteklenmemektedir. –
Onurları bitirir bitirmez, niyetim var. – Casebash