मैं कुछ बुनियादी प्रदर्शन और स्मृति की खपत मानक किया है और अगर वहाँ बातें भी तेजी से बनाने के लिए किसी भी तरह से है मैं सोच रहा था ...केवल पायथन में मुफ्त पढ़ने के लिए लॉक करें?
मैं एक numpy ndarray के साथ एक विशाल 70,000 तत्व सूची है, और कहा गया सूची में एक tuple में फ़ाइल पथ।
मेरा पहला संस्करण अजगर मल्टीप्रोसेस मॉड्यूल में प्रक्रियाओं में से प्रत्येक के लिए सूची का एक कटा हुआ प्रतिलिपि पारित कर दिया है, लेकिन यह 20 से अधिक गीगाबाइट
दूसरे संस्करण मैं इसे में चले गए करने के लिए राम उपयोग विस्फोट कर दे वैश्विक अंतरिक्ष और इसे मेरी प्रत्येक प्रक्रिया में एक लूप में foo [i] जैसे इंडेक्स के माध्यम से एक्सेस करें, जो इसे प्रक्रियाओं के साथ एक साझा मेमोरी एरिया/CoW semantics में डालता है, इस प्रकार यह स्मृति उपयोग को विस्फोट नहीं करता है (~ 3 पर रहता है गीगाबाइट्स)
हालांकि प्रदर्शन बेंचमार्क/ट्रेसिंग के अनुसार, ऐसा लगता है कि आवेदन समय के बड़े बहुमत को अब "अधिग्रहण" में खर्च किया गया है मोड ...
तो अगर वहाँ किसी भी तरह से मैं किसी भी तरह lockfree किसी प्रकार में इस सूची को बदल सकते हैं है मैं सोच रहा था/केवल पढ़ने के लिए इतना है कि मैं अधिग्रहण कदम का हिस्सा मदद करने के लिए तेजी लाने के साथ भाग कर सकते हैं और भी अधिक उपयोग करें।
संपादित करें 1: है सूची संरचना का एक उदाहरण यहाँ:
# 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"))
आगे से फिर यहाँ एप्लिकेशन
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}
संपादित 2 की रूपरेखा के शीर्ष कुछ लाइन उत्पादन है सिम सूची केवल पढ़ने के लिए है।
मेरी समस्या यह है कि मुझे एक numpy ndarray + filepath को स्टोर करने के लिए कुछ तरीका चाहिए। ऐरे सामान की मेरी समझ यह है कि यह केवल 1 तत्व को स्टोर करती है जैसे कि 'सी' यह "char" – Pharaun
@Pharaun स्टोर नहीं कर सकता: शायद मुझे आपकी सूची की संरचना सही ढंग से नहीं मिली। क्या आप इसे अपने प्रश्न में और अधिक स्पष्ट कर सकते हैं? मुझे पूरा यकीन है कि आपके आवेदन के लिए 'ऐरे' वर्ग का उपयोग किया जा सकता है। –
@Sven, मैंने उपरोक्त प्रश्न को एक अजीब नमूना के साथ अद्यतन किया है कि सूची को संपादन 2 के तहत कैसे बनाया गया है ताकि इसे एक विचार दे ... – Pharaun