"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية التعامل مع التسجيل في تطبيقات بايثون متعددة المعالجة؟

كيفية التعامل مع التسجيل في تطبيقات بايثون متعددة المعالجة؟

تم النشر بتاريخ 2024-11-08
تصفح:619

How to Handle Logging in Multiprocessing Python Applications?

تسجيل الدخول للمعالجات المتعددة في بايثون

عند استخدام وحدة المعالجة المتعددة في بايثون، من المهم مراعاة ممارسات التسجيل لتجنب الأخطاء الناجمة عن عمليات الكتابة المتعددة إلى نفس مقبض الملف في وقت واحد. بشكل افتراضي، يضمن المسجل المدرك للمعالجة المتعددة المقدم بواسطة mp.get_logger() آليات القفل المناسبة في sys.stderr.

ومع ذلك، قد تحتاج الوحدات النمطية غير المدركة للمعالجة المتعددة إلى تعديلات لاستخدام التسجيل المدرك للمعالجة المتعددة. لتجنب هذه التغييرات، فكر في طرق بديلة:

معالج التسجيل المخصص

تتمثل إحدى الطرق في إنشاء معالج سجل مخصص يرسل السجلات إلى العملية الرئيسية عبر أنبوب. يسمح هذا للوحدات النمطية باستخدام وحدة التسجيل القياسية بينما تتعامل العملية الأصلية مع التسجيل الفعلي. فيما يلي التنفيذ:

from logging.handlers import RotatingFileHandler
import multiprocessing, threading, logging, sys, traceback

class MultiProcessingLog(logging.Handler):
    def __init__(self, name, mode, maxsize, rotate):
        logging.Handler.__init__(self)

        self._handler = RotatingFileHandler(name, mode, maxsize, rotate)
        self.queue = multiprocessing.Queue(-1)

        t = threading.Thread(target=self.receive)
        t.daemon = True
        t.start()

يتلقى المعالج سجلات السجل من العمليات الفرعية ويكتبها في ملف باستخدام معالج الملف المقدم. وهذا يضمن التسجيل المركزي دون الحاجة إلى إجراء تغييرات على الوحدات التابعة.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3