استخدام الموارد في الملف قراءة/اكتب مع بيثون ، والخيارات والاعتبارات

StackOverflow https://stackoverflow.com/questions/4273259

سؤال

أنا أتطور في بيثون ، ما زلت جديدًا على اللعبة ، وأريد أن أتأكد من تعامل مع هذه المشكلة بشكل صحيح. سأقبل بكل سرور كل النصائح.

تخيل محاولة استخدام البيانات المخزنة عبر ملفات مسطحة متعددة ، في كثير من الحالات بحجم مشترك يتجاوز 20-35 جيجابايت. في الحالة الأكثر عمومية ، قد يتم تحديد هذه الملفات (CSV ، علامة التبويب) أو قد تكون ببساطة عرضًا ثابتًا. الهدف من ذلك هو أخذ هذه الملفات ، أو بعض مجموعة فرعية من كل ملف ، تحليل الإدخال (يمثل كل عمود متغيرًا في البيانات) ، وإرساله إلى بعض الوجهة (التي يمكن أن تكون محلية أو عن بُعد ، بعض الملفات المحلية الأخرى في مجموعة متنوعة من تنسيقات الإخراج بما في ذلك النص أو بعض تنسيق بيانات الملكية مثل Stata's .DTA)

الهدف من ذلك هو استخدام موارد النظام المتاحة لإجراء هذه العملية بأسرع طريقة ممكنة (أعتقد من حيث KB في الثانية؟)

أسئلة:

  1. هل هناك زيادة في الكفاءة من استخدام C المترجمة للقيام بعمليات القراءة؟ إذا كان الأمر كذلك ، فما هي المكتبة التي يجب أن أتعلم كيفية استخدامها؟ وهل هل يجب أيضًا القيام بالتحليل والإخراج؟

  2. إذا جاء الملف في .zip أو .gz ، هل يجب إلغاء ضغط الملف بأكمله قبل القراءة والكتابة ، أو هل تتركه مضغوطًا واستخدام مكتبة قادرة على القراءة من الملف المضغوط؟

  3. هل يجب أن يستخدم البرنامج متعدد الخيوط؟ أتصور قراءة بعض مجموعة فرعية من الملف (على سبيل المثال ، خطوط n في وقت واحد) ، تحليل وإخراج ، على سبيل المثال ، خيوط J. ليس من الواضح أن قراءة السطر في وقت واحد في كل مرة مثالية ... ويبدو أن العدد الأمثل من مؤشرات الترابط والعمليات يعتمد على الموارد المتاحة وحجم المهمة.
    لذلك ، ربما يجب أن يكون الكود "ذكيًا" بما يكفي لتحديد عدد المواضيع التي يجب استخدامها على النحو الأمثل ومقدار العمل الذي يجب أن يقوم به كل مؤشر ترابط.

  4. كيف يمكن لقياس ومقارنة الكفاءة بين الطرق المختلفة؟

  5. هل يجب أن يكون البرنامج قادرًا على القيام بذلك ديناميكيًا واختيار طرق إخراج الإدخال بناءً على أدائها؟ (هل ستشكل الطريقة A دائمًا طريقة B ، أو إجراء تغييرات خاصة في مسألة بيئة النشر)

فقط لأكون واضحًا ، أنا على استعداد لقبول أي مستوى تقريبًا من عدم كفاءة الكود في مقابل التحسينات غير المؤهلة في كفاءة الموارد

آمل أن توفر هذه الأسئلة فكرة واضحة عما أحاول اكتشافه. تقتصر تجربتي في البرمجة في الغالب على الحزم العلمية/الإحصائية ، لذلك إذا كان أي من أسئلتي يتلخص في "RTM" ، فيرجى أن تكون لطيفًا واقتراح الدليل المناسب.

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

المحلول

هل هناك زيادة في الكفاءة من استخدام C المترجمة للقيام بعمليات القراءة؟

ليس صحيحا. سيكون القيد هو عرض النطاق الترددي I/O ويستخدم Python مكتبات C الأساسية.

إذا جاء الملف في .zip أو .gz ، هل يجب إلغاء ضغط الملف بأكمله قبل القراءة والكتابة ، أو هل تتركه مضغوطًا واستخدام مكتبة قادرة على القراءة من الملف المضغوط؟

أولاً ، احصل على كل شيء آخر للعمل بشكل جيد. لا تحاول براعة هذا في المقدمة. يمكن لتطبيق zipfile من Python معالجة ملفات تنسيق CSV عن طريق فتح أعضاء أرشيف ZIP دون توسيعها.

هل هذا أسرع؟ لا يمكنك أن تعرف مقدمًا. يمكنك فقط معرفة بنيته وقياس ما قمت ببنائه. لا تنفجر يديك. انها فقط بضعة أسطر من التعليمات البرمجية. بناء كليهما.

هل يجب أن يستخدم البرنامج multithreading؟

رقم.

استخدم المعالجة المتعددة على مستوى OS.

python something.py source.zip | python part2.py | python part3.py | python part4.py >result

سيكون هذا سريعًا بشكل مثير للدهشة وسيستخدم - بدون الكثير من العمل - الكل موارد نظام التشغيل المتاحة.

كيف يمكن لقياس ومقارنة الكفاءة بين الطرق المختلفة؟

ummm ... هذا سؤال سخيف. أنت تبنيها وقياسها. الوقت المنقضي هو مقياس جيد مثل أي شيء آخر. إذا كنت مرتبكًا ، فاستخدم ساعة توقف. بشكل جاد. لا يوجد سحر.

هل يجب أن يكون البرنامج قادرًا على القيام بذلك ديناميكيًا واختيار طرق إخراج الإدخال بناءً على أدائها؟

رقم.

(هل ستشكل الطريقة A دائمًا طريقة B ، أو إجراء تغييرات خاصة في مسألة بيئة النشر)

نعم. ونعم. بعض الطرق دائما أكثر كفاءة. ومع ذلك ، فإن نظام التشغيل معقد بشكل جهنم ، لذلك لا يوجد شيء يستبدل للتصميم البسيط والمرن والمكون.

بناء قطع بسيطة يمكن إعادة تجميعها بمرونة.

لا تسير مقدما. صمم بنية البيانات الصحيحة والخوارزمية عندما تستطيع. عندما لا تستطيع ذلك ، فقط اختر شيئًا معقولًا والمضي قدمًا. يعد بناء شيء ما وضبطه أسهل بكثير من القلق على التفاصيل فقط لمعرفة أنهم لم يهموا أبدًا.

  1. بناء شيء ما.

  2. يقيس.

  3. العثور على عنق الزجاجة.

  4. تحسين فقط الاختناقات المثبتة.

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