تقنية

ملف بايثون المؤقت: هل fileno يبقيه في الذاكرة؟

نقل دون زيادة الحجم
_rolled: مؤشر داخلي؛ الحد 1024 بايتًا. [1] [2]

fileno() ينقل SpooledTemporaryFile إلى ملف على القرص. [1] [2]

الخلاصة السريعة

صغر المحتوى لا يمنع النقل عند طلب واصف الملف. [1] [2]

  • abc ثلاثة بايتات؛ مع حد 1024 بايتًا تغير _rolled من False إلى True بعد fileno(). [1] [2]
  • دون الطلب، كتابة 1024 بايتًا لا تنقل، و1025 تنقل. [1] [2]
  • المحتوى بعد النقل b'abc'؛ أغلقه سياق with. [1] [2]
  • _rolled مؤشر داخلي في اختبار 3.12.14، لا واجهة عامة ثابتة. [2]
  • وثائق 3.15 تصف النقل؛ لا نعد بعزل الذاكرة أو سرعة محددة. [1] [2]

المثال

import tempfile as t
with t.SpooledTemporaryFile(
 max_size=1024) as f:
 f.write(b'abc')
 print(f._rolled)
 f.fileno()
 print(f._rolled)
 f.seek(0)
 print(f.read())

[1] [2]

الناتج: False ثم True ثم b'abc'. [1] [2]

الحد والطلب

دون طلب واصف، تجاوز الحد ينقل المحتوى؛ المساواة وحدها لا تكفي في كتابة مثالنا. fileno() سبب مستقل للنقل. [1] [2]

المساواة والتجاوز
حد 1024، دون طلب واصف. [1] [2]

حد المراقبة

نستخدم المؤشر الداخلي للتوضيح في الإصدار المختبر فقط. رجعنا للبداية لقراءة البايتات؛ إغلاق السياق أنهى الملف. [1] [2]

النقل لا يثبت محو الذاكرة ولا يقيس الأداء. [1] [2]

المراجع

  1. Python: tempfile
  2. CPython 3.12.14: tempfile.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.