पायथन में मल्टीप्रोसेसिंग लॉगिंग
पायथन के मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करते समय, कई प्रक्रियाओं को लिखने के कारण होने वाली त्रुटियों से बचने के लिए लॉगिंग प्रथाओं पर विचार करना महत्वपूर्ण है एक ही फ़ाइल हैंडल एक साथ। डिफ़ॉल्ट रूप से, 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