मुझे कुछ समय के लिए मल्टीप्रोसेसिंग लॉगिंग के साथ संघर्ष किया गया है, और कई कारणों से।पायथन मल्टीप्रोसेसिंग लॉगिंग - क्यों multiprocessing.get_logger
मेरा कारण यह है कि, दूसरा get_logger क्यों है।
बेशक मैंने this question देखा है और ऐसा लगता है कि multiprocessing.get_logger कुछ लॉगिंग हैंडलिंग चिकनी बनाने के लिए कुछ "प्रक्रिया-साझा ताले" जादू करता है।
तो, आज मैंने पाइथन 2.7 (/multiprocessing/util.py) के मल्टीप्रोसेसिंग कोड में देखा, और पाया कि यह लॉगर सिर्फ एक सादा लॉगिंग है। लॉगर, और इसके आसपास कोई जादू नहीं है।
यहाँ अजगर दस्तावेज में विवरण दिया गया है, है ना get_logger समारोह से पहले:
प्रवेश के लिए कुछ समर्थन उपलब्ध है। नोट, हालांकि, लॉगिंग पैकेज प्रक्रिया साझा लॉक का उपयोग नहीं करता है, इसलिए मिश्रित होने के लिए विभिन्न प्रक्रियाओं के संदेशों के लिए यह संभव है (हैंडलर प्रकार पर पर निर्भर करता है)।
तो जब आप गलत लॉगिंग हैंडलर का उपयोग करते हैं, तो get_logger लॉगर भी गलत हो सकता है? मैंने कुछ प्रोग्राम लॉग इन करने के लिए get_logger का उपयोग किया है। यह स्ट्रीमहैंडलर को लॉग प्रिंट करता है और (लगता है) कभी मिश्रित नहीं होता है।
अब मेरे सिद्धांत है:
- multiprocessing.get_logger सभी
- StreamHandler बहु के लिए काम करता है पर प्रक्रिया से साझा की गई ताले नहीं करते हैं, लेकिन FileHandler
- इस get_logger लकड़हारा के प्रमुख उद्देश्य नहीं है ट्रैकिंग प्रक्रियाओं ' जीवन चक्र के लिए है, और प्रदान करते हैं एक करने के लिए मिल में आसान और रेडी-टू-उपयोग लकड़हारा कि पहले से ही सामान की प्रक्रिया का नाम/आईडी प्रकार लॉग
यहां सवाल है:
क्या मेरा सिद्धांत सही है?
कैसे/क्यों/आप इस get_logger का उपयोग कब करते हैं?
क्षमा करें मैं ब्लॉब्स्पॉट पर नहीं जा सकता क्योंकि मैं कहां हूं, मुझे पता है कि आपकी पोस्ट मल्टीप्रोसेसिंग-फ्रेंडली लॉगिंग के बारे में है, धन्यवाद। इसके बारे में, मैं वास्तव में zmq .log का उपयोग करने के लिए zmq.log का उपयोग करना चाहता हूं। :-) – tdihp