2013-08-09 25 views
6

GUI kodumun bir parçası olarak basit bir üretici tüketici modelim var. Optimizasyon için herhangi bir şans olup olmadığını görmek için sadece belirli tüketici bölümünü izlemeyi deniyorum. Ancak, kodu python -m cProfile -o out.txt myscript.py ile çalıştırmaya çalışırken Python'un pickle modülünden bir hata atıyorum.Profilleme Çoklu işlem kullanan Python kodu?

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 

kod temel desen Bu genellikle şeylerin GUI taraftan görevleri beslenir, ancak şu şekilde test amacıyla, bunu kurmak

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 

olup.

if __name__ == '__main__': 

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

Ancak, komut dosyasını başlatmaya çalıştığınızda yukarıdaki hata iletisini alıyorum.

Hataların bir yolu var mı?

cevap

3

Anlayışımda cProfile modülü, komut satırında multiprocessing ile iyi çalışmıyor. (Bkz. Python multiprocess profiling.)

Bu konu üzerinde çalışmanın bir yolu, profileri kodunuzun içinden çalıştırmaktır - özellikle havuzunuzdaki her işlem için farklı bir profil çıkış dosyası oluşturmanız gerekir. cProfile.runctx('a+b', globals(), locals(), 'profile-%s.out' % process_name) numaralı telefonu arayarak bunu kolayca yapabilirsiniz.

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