вторник, 25 ноября 2014 г.

Дизассемблировать python-программу

Порой бывает интересно, что происходит "под капотом" вашей программы. В python есть замечательный модуль dis, который позволяет посмотреть, как интерпретатор выполняет ваш код.

Создадим файл app.py:
import dis

n = 0

def application(env, start_response):
    global n
    n = n + 1
    response = "%.6d" % n
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return [response]

if '__main__' == __name__:
    print(dis.dis(application))
А теперь в терминале запустите этот файл:
$ python app.py

Программа выведет следующее:
           0 LOAD_GLOBAL              0 (n)
              3 LOAD_CONST               1 (1)
              6 BINARY_ADD         
              7 STORE_GLOBAL             0 (n)

           10 LOAD_CONST               2 ('%.6d')
             13 LOAD_GLOBAL              0 (n)
             16 BINARY_MODULO      
             17 STORE_FAST               2 (response)

 10          20 LOAD_FAST                1 (start_response)
             23 LOAD_CONST               3 ('200 OK')
             26 LOAD_CONST               6 (('Content-Type', 'text/plain'))
             29 BUILD_LIST               1
             32 CALL_FUNCTION            2
             35 POP_TOP            

 11          36 LOAD_FAST                2 (response)
             39 BUILD_LIST               1
             42 RETURN_VALUE       

Слева приведены строки нашей программы. Здесь видно, что операция инкремента переменной n (строка 7) занимает 4 операции.

Комментариев нет:

Отправить комментарий