2013-08-09 19 views
6

मेरे पास मेरे गुई कोड के हिस्से में स्थापित एक साधारण निर्माता उपभोक्ता पैटर्न है। मैं ऑप्टिमाइज़ेशन के लिए कोई मौका देखने के लिए सिर्फ विशिष्ट उपभोक्ता अनुभाग को प्रोफाइल करने का प्रयास कर रहा हूं। हालांकि, python -m cProfile -o out.txt myscript.py के साथ कोड चलाने का प्रयास करते समय मुझे पाइथन के pickle मॉड्यूल से एक त्रुटि मिल रही है।प्रोफाइलिंग पाइथन कोड जो मल्टीप्रोसेसिंग का उपयोग करता है?

File "<string>", line 1, in <module> 
    File "c:\python27\lib\multiprocessing\forking.py", line 374, in main 
    self = load(from_parent) 
    File "c:\python27\lib\pickle.py", line 1378, in load 
    return Unpickler(file).load() 
    File "c:\python27\lib\pickle.py", line 858, in load 
    dispatch[key](self) 
    File "c:\python27\lib\pickle.py", line 880, in load_eof 
    raise EOFError 
EOFError 

कोड में बुनियादी पैटर्न

class MyProcess(multiprocessing.Process): 
    def __init__(self, in_queue, msg_queue): 
     multiprocessing.Process.__init__(self) 
     self.in_queue = in_queue 
     self.ext_msg_queue = msg_queue 
     self.name == multiprocessing.current_process().name 

    def run(self): 
     ## Do Stuff with the queued items 

है यह आमतौर पर चीजों के जीयूआई की ओर से कार्य तंग आ गया है, लेकिन परीक्षण प्रयोजनों के लिए, मैं इसे सेट अप इस प्रकार है।

if __name__ == '__main__': 

    queue = multiprocessing.Queue() 
    meg_queue = multiprocessing.Queue() 
    p = Grabber(queue) 
    p.daemon = True 
    p.start() 
    time.sleep(20) 
    p.join() 

लेकिन स्क्रिप्ट शुरू करने की कोशिश करने पर, मुझे उपरोक्त त्रुटि संदेश मिलता है।

क्या त्रुटि के आसपास कोई रास्ता है?

उत्तर

3

मेरी समझ में cProfile मॉड्यूल कमांड लाइन पर multiprocessing के साथ अच्छी तरह से नहीं खेलता है। (Python multiprocess profiling देखें।)

इसके आसपास काम करने का एक तरीका है अपने कोड के भीतर से प्रोफाइलर को चलाने के लिए - विशेष रूप से, आपको अपने पूल में प्रत्येक प्रक्रिया के लिए एक अलग प्रोफाइलर आउटपुट फ़ाइल सेट अप करने की आवश्यकता होगी। आप cProfile.runctx('a+b', globals(), locals(), 'profile-%s.out' % process_name) पर कॉल करके इसे आसानी से कर सकते हैं।

http://docs.python.org/2/library/profile.html#module-cProfile

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