2009-10-05 14 views
5

मैं बड़े मैट्रिक्स के साथ काम कर रहा हूं, इसलिए मैं न्यूप्पी के memmap का उपयोग कर रहा हूं। हालांकि, मुझे एक त्रुटि मिल रही है क्योंकि जाहिर है कि memmap द्वारा उपयोग किए गए फ़ाइल डिस्क्रिप्टर बंद नहीं किए जा रहे हैं।NumPy और memmap: [Errno 24] बहुत सारी खुली फ़ाइलें

import numpy 
import tempfile 

counter = 0 
while True: 
    temp_fd, temporary_filename = tempfile.mkstemp(suffix='.memmap') 
    map = numpy.memmap(temporary_filename, dtype=float, mode="w+", shape=1000) 
    counter += 1 
    print counter 
    map.close() 
    os.remove(temporary_filename) 

जो मैं समझता हूं उससे, विधि बंद होने पर memmap फ़ाइल बंद होती है() कहा जाता है। हालांकि, इसके बाद के संस्करण कोड नहीं कर सकते पाश हमेशा के लिए, यह अंततः "[errno 24] बहुत अधिक फ़ाइलें खुली" त्रुटि फेंकता के रूप में:

1016 
    1017 
    1018 
    1019 
    Traceback (most recent call last): 
     File "./memmap_loop.py", line 11, in <module> 
     File "/usr/lib/python2.5/site-packages/numpy/core/memmap.py", line 226, in __new__ 
    EnvironmentError: [Errno 24] Too many open files 
    Error in sys.excepthook: 
    Traceback (most recent call last): 
     File "/usr/lib/python2.5/site-packages/apport_python_hook.py", line 38, in apport_excepthook 
    ImportError: No module named packaging_impl 

    Original exception was: 
    Traceback (most recent call last): 
     File "./memmap_loop.py", line 11, in <module> 
     File "/usr/lib/python2.5/site-packages/numpy/core/memmap.py", line 226, in __new__ 
    EnvironmentError: [Errno 24] Too many open files 

किसी को भी पता है कि मैं क्या अनदेखी कर रहा हूँ?

उत्तर

4

चूंकि memmap ओपन फ़ाइल डिस्क्रिप्टर नहीं लेता है, लेकिन फ़ाइल का नाम, मुझे लगता है कि आप temp_fd फ़ाइल डिस्क्रिप्टर को रिसाव करते हैं। os.close(temp_fd) मदद करता है?


बढ़िया है कि यह काम करता है।

चूंकि आप numpy.memmap को फ़ाइल-जैसी ऑब्जेक्ट पास कर सकते हैं, तो आप पहले से मौजूद फ़ाइल डिस्क्रिप्टर से temp_fd बना सकते हैं।

fobj = os.fdopen(temp_fd, "w+") 
numpy.memmap(fobj, ... 
+0

इससे मदद मिलती है। अब यह काम कर रहा है। धन्यवाद। – plok

संबंधित मुद्दे