पायथन में मल्टीप्रोसेसिंग प्रोग्राम डिबगिंग में कुछ अच्छे अभ्यास क्या हैं?
पायथन में मल्टीप्रोसेसिंग प्रोग्राम डिबगिंग में कुछ अच्छे अभ्यास क्या हैं?
जवाबों:
पायथन कार्यक्रमों का सच बहुसंकेतन (बहु- पिरोया पायथन कार्यक्रमों के लिए जो खूंखार जीआईएल से निपटना है ) किसी भी अन्य भाषा में उन लोगों से अलग नहीं हैं। वे सभी एक ही बुनियादी चुनौतियां हैं:
हालांकि ऐसी विकास विधियां हैं जो इन समस्याओं में से प्रत्येक से बचने की कोशिश करती हैं, दिन के अंत में आपको वास्तव में यह सोचने की जरूरत है कि आप क्या कर रहे हैं। मैं भारी तनाव परीक्षण की सिफारिश करता हूं - आपके द्वारा वास्तविक जीवन में हो सकने वाली किसी भी चीज से परे - ताकि आपके पास उन विंडोज ऑफ ऑपर्चुनिटी को मारने और विकास में एक प्रमुख डेमो के बीच में या उत्पादन के दौरान उड़ाने का एक अच्छा मौका हो।
हम माइक्रोसेकंड-टाइमस्टैंप लॉग फ़ाइलों का उपयोग करते थे और इसलिए हम कर सकता है तो एक रंग कोडित लॉग देखने एप्लिकेशन बनाया कोशिश कल्पना करने के लिए क्या एन प्रक्रिया के बीच हो रहा था एम प्रोसेसर पर चल रहा है। हमने एक सिस्टम बनाने की भी कोशिश की (और ज्यादातर सफल) जो क्रैश के संदर्भ को फिर से बनाने के लिए लॉग फाइल को बंद कर देगा।
लेकिन सबसे अच्छा उपकरण अच्छा डिज़ाइन और वास्तव में दुष्ट, बुरा लोग हैं जो आपके ऐप को पानी से बाहर निकालने की कोशिश करते हैं। (हाय, डबेल!)
एक चीज जो मुझे बहुत उपयोगी लगती है, वह है कि multiprocessing
मॉड्यूल में मौजूदा लकड़हारा का उपयोग करना । इसे अपने मुख्य कोड में आज़माएं:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
इसे भी देखें: http://docs.python.org/library/multiprocessing.html#log
इसके अतिरिक्त, आप वर्तमान प्रक्रिया नाम का उपयोग कर सकते हैं:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
देखें: http://docs.python.org/library/multiprocessing.html#multiprocessing.current_process
इसके अलावा मुझे मानक डिबगिंग विधियों जैसे pdb
& co के अलावा और कुछ नहीं पता है ।