2013-08-09 5 views
6

У меня есть простой шаблон производителя, созданный в рамках моего кода gui. Я пытаюсь профилировать только конкретную потребительскую секцию, чтобы увидеть, есть ли вероятность для оптимизации. Однако при попытке запустить код с python -m cProfile -o out.txt myscript.py я получаю сообщение об ошибке, выведенное из модуля pickle Python.Профилирование кода Python, использующего многопроцессорность?

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 

Это, как правило, подается задачей из GUI стороны вещей, но для целей тестирования, я поставил его следующим образом.

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

Смежные вопросы