Bazı temel performans ve bellek tüketimi kriterler yaptık ve daha da hızlı bir şeyler yapmak için herhangi bir yolu olup olmadığını merak ediyorum ... Yalnızca oku kilitle Python'da liste var mı?
- Bir numpy ndarray dev 70,000 eleman listesi var ve Söz konusu listedeki bir tuple içindeki dosya yolu.
Benim ilk sürümü piton çok işlemli modülünde süreçlerin her birine listesinin bir doğradı kopyasını geçti ama 20 + GB
ben içine taşındı ikinci versiyonu için ram kullanımını patlayabilir global uzayı ve indeks aracılığıyla indeks aracılığıyla erişirim (i) süreçlerimin her birinde bir döngü içinde bir bellek alanı/CoW semantiği haline getirmiş gibi görünen süreçlerle birlikte bellek kullanımını patlatmaz (Stays at ~ 3 Gigabaytlar)
Ancak, performans ölçütlerine göre, uygulama zamanının büyük çoğunluğu artık "satın alma" olarak harcandığı anlaşılıyor. mod ...
Yani ben nasılsa lockfree çeşit Bu listeyi açmak gibi bir ihtimal var olup olmadığını merak edildi
/I hızlandırmak için acquire adımın bir parçası ile deplasmanda yapabileceği tek böylece okundu daha fazla erişim.
Düzenleme 1: bundan böyle Ardından
# Sample code for a rough idea of how the list is constructed
sim = []
for root, dirs, files in os.walk(rootdir):
path = os.path.join(root, filename)
image= Image.open(path)
np_array = np.asarray(image)
sim.append((np_array, path))
# Roughly it would look something like say this below
sim = List((np.array([[1, 2, 3], [4, 5, 6]], np.int32), "/foobar/com/what.something"))
: Liste yapısının bir örneği İşte ediyor: İşte app
ncalls tottime percall cumtime percall filename:lineno(function)
65 2450.903 37.706 2450.903 37.706 {built-in method acquire}
39320 0.481 0.000 0.481 0.000 {method 'read' of 'file' objects}
600 0.298 0.000 0.298 0.000 {posix.waitpid}
48 0.271 0.006 0.271 0.006 {posix.fork}
Düzenleme 2'nin profilleme üst birkaç satır çıkışı var SIM listesi sadece okunmalıdır.
Sorunum, numpy ndarray + dosya yolunu depolamanın bir yoluna ihtiyacım var. Array öğelerini anladığımda, yalnızca "c" gibi "element" ("char") depolayamayacağı 1 öğe depolanıyor. – Pharaun
@Pharaun: Belki de listenizin yapısını doğru bir şekilde alamadım. Sorunuzda bunu daha açık hale getirebilir misiniz? Eminim 'Array' sınıfı uygulamanız için kullanılabilir. –
@Sven, Yukarıdaki soru, listenin edit2 altında nasıl oluşturulduğunun kaba bir örneğiyle güncelledim, bu yüzden bir fikir vermeliyim ... – Pharaun