Mengendalikan Fail JSON Besar-besaran tanpa Beban Memori
Memuatkan fail JSON yang besar ke dalam memori selalunya boleh mengakibatkan keletihan memori. Pertimbangkan senario berikut:
<code class="python">from datetime import datetime import json print(datetime.now()) f = open('file.json', 'r') json.load(f) f.close() print(datetime.now())</code>
Kod ini cuba memuatkan keseluruhan kandungan fail JSON, yang boleh membawa kepada MemoryError. Ini kerana json.load() mewakilkan kepada json.loads(f.read()), yang membaca keseluruhan fail ke dalam memori terlebih dahulu.
Penyelesaian: Hayati Kuasa Penstriman
Untuk mengelakkan kekangan memori, pertimbangkan untuk mendekati pemprosesan JSON sebagai strim dan bukannya blok lengkap. Ini melibatkan membaca bahagian fail sahaja, memprosesnya dan meneruskan secara berulang sehingga keseluruhan fail dikendalikan.
Satu pilihan yang sangat disyorkan ialah ijson, modul yang disesuaikan untuk penstriman data JSON. Dengan bantuannya, anda boleh bekerja dengan JSON sebagai strim dan bukannya fail statik, dengan berkesan mengelakkan pengehadan memori.
<code class="python"># With ijson import ijson with open('file.json', 'r') as f: for event, value in ijson.parse(f): # Process the event and value</code>
Penyelesaian Alternatif
Dua alternatif lain yang patut diberi perhatian :
Dengan menggunakan teknik ini, anda boleh memproses dengan cekap walaupun fail JSON yang paling besar tanpa mengalami keletihan memori.
Atas ialah kandungan terperinci Bagaimana Memproses Fail JSON Besar-besaran Tanpa Kehabisan Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!