6

以下を使用して、いくつかの 2,000 FITS をメモリにロードしようとしていますastropy.io.fits

def readfits(filename):
    with fits.open(filename) as ft:
        # the fits contain a single HDU
        data = ft[0].data
    return data

data_sci = []
for i in range(2000):
    data_sci.append(readfits("filename_{}.fits".format(i)))

ただし、1015 番目のファイルに到達すると、OSError: [Errno 24] Too many open filesが発生します。

私は同じ問題を抱えています:

def readfits(filename):
    ft = fits.open(filename) as ft:
    data = ft[0].data
    ft.close()
    return data

astropy.io.fitsファイルを適切に閉じていないと思われます。ファイルを強制的に閉じる方法はありますか?

4

3 に答える 3

3

関数readfitsは、データへのアクセスを維持するために実際にファイルハンドルを開いたままにします。これは、デフォルトでデータへのmmapを作成し、説明されているように物理メモリに完全に読み込まないためです。http://astropy.readthedocs.org/ en/latest/io/fits/appendix/faq.html#im-opening-many-fits-files-in-a-loop-and-getting-oserror-too-many-open-files

ちなみに、最初の HDU からデータを読み取る関数だけが必要な場合、これは既に組み込まれています: http://docs.astropy.org/en/v1.0.5/io/fits/api/files.html#astropy .io.fits.getdata

車輪を再発明する必要はありません。

于 2015-10-06T15:10:38.267 に答える