سؤال

لدي ملف مفتوح للكتابة، وعملية مستمرة لعدة أيام - يتم كتابة شيء ما في الملف في لحظات عشوائية نسبيًا.ما أفهمه هو - حتى أفعل file. Close() - هناك احتمال ألا يتم حفظ أي شيء على القرص.هل هذا صحيح؟

ماذا لو تعطل النظام عندما لم تنتهي العملية الرئيسية بعد؟هل هناك طريقة للقيام بنوع من الالتزام مرة واحدة كل ...قل - 10 دقائق (وأنا أسمي هذا التزامًا بنفسي - لا حاجة لتشغيل المؤقت)؟هل file.Close() و open(file,'a') هما الطريقة الوحيدة أم أن هناك بدائل أفضل؟

هل كانت مفيدة؟

المحلول

ويجب أن تكون قادرا على استخدام file.flush() للقيام بذلك.

نصائح أخرى

إذا كنت لا تريد إنهاء العملية الحالية لإضافتها f.flush() (يبدو أنه تم تشغيله لعدة أيام بالفعل؟)، يجب أن تكون على ما يرام.إذا رأيت الملف الذي تكتبه يكبر، فلن تفقد تلك البيانات...

من مستندات بايثون:

الكتابة (شارع)اكتب سلسلة إلى الملف.لا توجد قيمة مستردة.بسبب التخزين المؤقت ، قد لا تظهر السلسلة فعليًا في الملف حتى يتم استدعاء طريقة Flush () أو Close ().

يبدو أن نظام التخزين المؤقت في بايثون سوف يقوم تلقائيًا بمسح كائنات الملفات، لكن هذا غير مضمون عند حدوث ذلك.

لتأكد من أنك هو مكتوب على القرص البيانات، واستخدام file.flush() تليها os.fsync(file.fileno()).

وكما سبق وذكرت استخدام الأسلوب .flush () لفرض الكتابة من المخزن المؤقت، ولكن تجنب استخدام الكثير من المكالمات للقضاء حيث أن هذا يمكن أن يبطئ فعلا كتاباتك أسفل (إذا يعتمد التطبيق على الكتابة السريعة) كما عليك أن يجبر الملفات الخاصة بك لكتابة التغييرات التي تكون أصغر من انها حجم المخزن المؤقت الذي يمكن أن تجلب لك على ركبتيك. :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top