2009-08-30 15 views
16

मुझे एक बहु-प्रक्रिया अनुप्रयोग डीबग करने में समस्या हो रही है (विशेष रूप से पायथन के मल्टीप्रोसेसिंग मॉड्यूल में एक प्रक्रिया पूल का उपयोग करना)। मेरे पास एक स्पष्ट डेडलॉक है और मुझे नहीं पता कि इसका क्या कारण है। स्टैक ट्रेस समस्या का वर्णन करने के लिए पर्याप्त नहीं है, क्योंकि यह केवल मल्टीप्रोसेसिंग मॉड्यूल में कोड प्रदर्शित करता है।मल्टीप्रोसेसिंग डीबग तकनीक

क्या कोई पाइथन उपकरण हैं, या अन्यथा सामान्य तकनीकें डेडलॉक डीबग करने के लिए उपयोग की जाती हैं?

उत्तर

31

याहू, डिबगिंग डेडलॉक्स मजेदार है। इसके अलावा,

import multiprocessing, logging 
logger = multiprocessing.log_to_stderr() 
logger.setLevel(multiprocessing.SUBDEBUG) 

अपने कोड में कुछ भी है कि एक संसाधन या whatnot कि में हो सकता है के साथ सौदों के लिए लॉगिंग जोड़ें: यह के वर्णन के लिए the Python documentation देखते हैं, लेकिन वास्तव में जल्दी से - आप अधिक होने की लॉगिंग स्तर सेट कर सकते हैं विवाद। अंत में, अंधेरे में गोली मार दी: आयात के दौरान बाल प्रक्रियाओं को दूर करने से समस्या हो सकती है।

+2

हाँ - लॉगिंग के बहुत सारे, जितना खराब हो सकता है, अभी भी अलग-अलग करने और अंततः डेडलॉक समस्याओं को ढूंढने और ठीक करने के लिए सबसे अच्छा समग्र दृष्टिकोण है ... +1 कहां से। मल्टीप्रोसेसिंग में इसकी कतार के साथ विशिष्ट डेडलॉक समस्याएं हैं, जो अच्छी तरह से प्रलेखित हैं - जांचें कि आप उन लोगों में नहीं चल रहे हैं। –

3

पहले स्थान पर डेडलॉक्स से बचने के लिए, अच्छी प्रथाओं को सीखना उपयोगी है, क्योंकि समांतर प्रसंस्करण वास्तव में काफी सूक्ष्म है। (फ्री) Little Book of Semaphores एक बहुत ही सुखद पढ़ने वाला हो सकता है!

संबंधित मुद्दे