मैं एक प्रोग्राम लिख रहा हूं जो उच्च गति डेटा अधिग्रहण करेगा। अधिग्रहण कार्ड 6.8 जीबी/एस (यह पीसीआई 3 एक्स 8 पर है) पर चला सकता है। अभी मैं पाइथन के साथ प्राप्त अधिकतम लेखन गति को देखने के लिए रैम डिस्क पर स्ट्रीम करने की कोशिश कर रहा हूं।पायथन के साथ अधिकतम लेखन गति कैसे प्राप्त करें?
कार्ड मुझे 5-10 एमबी ब्लॉक देने जा रहा है, जिसे मैं कहीं और लिख सकता हूं।
मैंने कोड का यह टुकड़ा लिखा है, जो बाइनरी फ़ाइल में 10 गुना ब्लॉक 500 गुना लिखता है। मैं विंडोज 7 64-बिट पर एनाकोंडा 2 का उपयोग कर रहा हूं, और मैंने एनाकोंडा के त्वरित से प्रोफाइलर का उपयोग किया।
block = 'A'*10*1024*1024
filename = "R:\\test"
f = os.open(filename, os.O_CREAT| os.O_BINARY|os.O_TRUNC|os.O_WRONLY|os.O_SEQUENTIAL)
p = profiler.Profile(signatures=False)
p.enable()
start = time.clock()
for x in range(500):
os.write(f,block)
transferTime_sec = time.clock() - start
p.disable()
p.print_stats()
print('\nwrote %f MB' % (os.stat(filename).st_size/(1024*1024)))
मैं एक रैम डिस्क (नि: \) पर इस परीक्षण किया है और मैं निम्नलिखित उत्पादन मिल गया:
तो मैं सोचा, मैं हो रही है कुछ 2.5 GB/s पर राम। जो खराब नहीं है लेकिन अभी भी अधिकतम रैम थ्रूपुट से दूर है, लेकिन संख्याएं सुसंगत हैं। तो कम थ्रूपुट एक समस्या है।
दूसरी समस्या यह है कि, जब मैं पीसीआई एसएसडी (जिसे मैंने 1090 एमबी/एस अनुक्रमिक लेखन पर किसी अन्य सॉफ़्टवेयर के साथ बेंचमार्क किया था) के साथ इस कोड का परीक्षण किया, तो यह तुलनीय आंकड़े देता है।
यह मैं लगता है कि यह कैशिंग और/या बफरिंग (?) और तो मैं बस को मापने नहीं कर रहा हूँ वास्तविक आईओ है बनाता है। मुझे यकीन नहीं है कि वास्तव में क्या चल रहा है क्योंकि मैं पाइथन के लिए बिल्कुल नया हूं।
तो मेरा मुख्य प्रश्न यह है कि अधिकतम लेखन गति कैसे प्राप्त करें, और एक साइड सवाल यह है कि मुझे इन नंबरों को क्यों मिल रहा है?
मुझे आश्चर्य है, आपने 'ओपन()' के बजाय 'os.open()' क्यों उपयोग किया ?? –
पुरुष सुनिश्चित करें कि कोई प्रक्रिया लिखने में हस्तक्षेप नहीं कर रही है, हां, मैं आपको विंडोज डिफेंडर देख रहा हूं। –
@ShadyAtef फ़ाइल विशेषताओं पर अधिक नियंत्रण, संभावित IO –