Bazı performanslar elde etmek için python'un çoklu işlem kitaplığını kullanmaya çalışıyorum. Özellikle map işlevini kullanıyorum. Şimdi, herhangi bir sebepten ötürü tek bir iş ortağıyla değiştirdiğimde, yüksek bellek kullanımı elde edemiyorum. Fakat haritanın çok işlemli versiyonunu kullanmak hafızamın çatıdan geçmesine neden oluyor. Kayıt için, hafızayı kolayca doldurabilecek bir şey yapıyorum, ama ikisi arasında ne tür bir fark yaratacak bir fark var?Yüksek bellek kullanımı yalnızca çok işlem yaparken
cevap
Çok işlemcinin iş parçacığı kullanmadığını fark ediyorsunuz, evet? Bunu söylüyorum çünkü "tek bir iş parçacığı" sözünden bahsediyorsun.
Eğer multiprocessing
'ın map
aracılığıyla çok fazla veri gönderiyor musunuz? Muhtemel bir neden, seri hale getirme işleminin birçok durumda yapılması gerektiğidir. multiprocessing
, pickle
kullanır; bu genellikle, asitleme yaptığından daha fazla bellek alır. (Bazı durumlarda, özel olarak map
yöntemini çağırdığınızda o yüzden yapamaz mevcut sürecine yeni veri göndermek gerekiyor açıldığında işlem seri önlemek, ancak yeni süreçler oluşturulur fork()
sistemlerde.)
yana multiprocessing
ile gerçek işin tamamı ayrı işlemlerde yapılır, ana işleminizin belleği gerçekleştirdiğiniz gerçek işlemlerden etkilenmemelidir. Bununla birlikte, belleğin toplam kullanımı biraz artar, çünkü her çalışan işleminde gönderdiğiniz verilerin bir kopyası vardır. Bu, bazen CoW'ye sahip sistemlerde yazma üzerine yazılan bellek (serileştirme ile aynı durumda değil), ancak Python'un bellek kullanımı, bu yazının hızlı bir şekilde yazılacağı ve bu şekilde kopyalanacağı şekildedir.
Doğru, özür dilerim ki çok işlemcinin aslında thread kullanmıyor olduğunu biliyorum. (Bu nedenle isim) Bu yüzden bilgileri boruya göndermek, onu öldüren şeydir. Çok mantıklı. Karşılaştığım soruna herhangi bir çözüm biliyor musunuz? – Sandro
Daha az veri gönder. Ya da, daha küçük parçalar halinde gönderin. Veya fork() ile bir sistem üzerindeyseniz, serileştirme gerçekleşmeyecek şekilde yapın: çoklu işlemenin yeni süreçlere başlayacağından emin olun. –
- 1. Yüksek bellek kullanımı,
- 2. Node.js yüksek sanal bellek kullanımı
- 3. Gradle daemon tarafından yüksek bellek kullanımı
- 4. PostgreSQL backend işlemi yüksek bellek kullanımı sorunu
- 5. Bellek kullanımı: Program çok fazla bellek ayırıyor
- 6. mongodb yüksek işlemci kullanımı
- 7. Bellek kullanımı nasıl görüntülenir?
- 8. İdeal bellek kullanımı tutarları
- 9. Java'da en yüksek yığın bellek kullanımı nasıl ölçülür?
- 10. Bellek kullanımı
- 11. Glassfish - yüksek CPU kullanımı
- 12. Liste görünümü bellek kullanımı
- 13. Bellek Bant Genişliği Kullanımı
- 14. En yüksek işlem boyutu PostgreSQL
- 15. Çok iş parçacıklı kullanımı SQLAlchemy
- 16. ASP.NET: Yüksüz yüksek CPU kullanımı
- 17. Eclipse "javaw.exe" Yüksek CPU kullanımı
- 18. Sınır JTextPane bellek kullanımı
- 19. Tomcat PowerShell Bellek Kullanımı
- 20. Resharper bellek kullanımı 2008
- 21. Linux bellek kullanımı geçmişi
- 22. Java BigDecimal bellek kullanımı?
- 23. iphone bellek kullanımı
- 24. Process.TotalProcessorTime tarafından işlem cpu kullanımı hesaplanıyor
- 25. Xcode 6.0.1 göstermiyor bellek kullanımı
- 26. Dize VS Byte [], bellek kullanımı
- 27. Uygulama, yalnızca Bellek Hatası
- 28. Çerçeve hızı çok yüksek
- 29. i bu işlem sızıntı bellek
- 30. SQL Server 2008 Yüksek CPU kullanımı
Kayıt için, bu bellek * kullanım * gibi bir bellek * sızıntısı * gibi gelmiyor. –
Çok doğru, bir kez daha, benim üzerimde kötü ifadeler. – Sandro