Есть ли способ каждую строку скрипта Python? [Дубликат]

Вы, кодер, отвечаете за предоставление различных решений для разных размеров экрана. Вы проверяете размер устройства, а затем представляете контент соответствующим образом. В целом, это не так, чтобы отличать контент от ротации. Если вы надеетесь на волшебное решение, которое сделает все, что для вас в AIR, вам не повезло, потому что его нет.

Не рекомендуется использовать сценарные скальмоды (вы всегда должны использовать шкалу на мобильном устройстве), так как тогда вы полностью отказываетесь от возможности сравнивать позицию вашего объекта отображения в соответствии с реальным размером физического устройства (в основном вы не будет знать точно, что бы вы не отображали на экране или полностью из него).

Если вы считаете, что разработка для мобильных устройств была простой (не только с использованием AIR, но с использованием любой технологии), тогда извините, это не особенно важно, потому что вы должны обрабатывать все эти размеры.

Основной принцип о том, как с этим бороться:

  1. получить реальный размер устройства.
  2. рассчитать реальную плотность / отношение.
  3. Сравните этот размер с размером вашего приложения. (снова масштабируйте режим без масштабирования)
  4. Извлеките общее соотношение (размер вашего приложения по сравнению с размером устройства)
  5. Используйте это соотношение для масштабирования и размещения основного контейнера ( контейнер, который содержит все ваше приложение), жесткий: масштабировать и размещать весь ваш DisplayObject в вашем приложении.
  6. Так как отношение приложения поддерживается, заполните пустое пространство любым.
  7. Ваше приложение правильно заполняет весь экран на любом устройстве.
83
задан rocketmonkeys 13 October 2010 в 21:12
поделиться

3 ответа

Я считаю, что это то, что предназначено для line_profiler Роберта Керна . Из ссылки:

File: pystone.py
Function: Proc2 at line 149
Total time: 0.606656 s

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
   149                                           @profile
   150                                           def Proc2(IntParIO):
   151     50000        82003      1.6     13.5      IntLoc = IntParIO + 10
   152     50000        63162      1.3     10.4      while 1:
   153     50000        69065      1.4     11.4          if Char1Glob == 'A':
   154     50000        66354      1.3     10.9              IntLoc = IntLoc - 1
   155     50000        67263      1.3     11.1              IntParIO = IntLoc - IntGlob
   156     50000        65494      1.3     10.8              EnumLoc = Ident1
   157     50000        68001      1.4     11.2          if EnumLoc == Ident1:
   158     50000        63739      1.3     10.5              break
   159     50000        61575      1.2     10.1      return IntParIO

Надеюсь, что это поможет!

97
ответ дан Joe Kington 18 August 2018 в 10:49
поделиться
  • 1
    Работает ли line_profiler с Python 3? Я не мог получить информацию об этом. – user1251007 23 July 2012 в 16:02
  • 2
    @Rocketmonkeys вы бы хотели поделиться своим декоратором django? – meshy 16 October 2012 в 12:59
  • 3
    line_profiler не показывает удары и время для меня. Может ли кто-нибудь сказать мне, почему? И как решить? – I159 6 January 2013 в 14:03
  • 4
    Вот декоратор, который я написал: gist.github.com/kylegibson/6583590 . Если вы используете nosetests, обязательно используйте параметр -s, поэтому stdout печатается немедленно. – Kyle Gibson 16 September 2013 в 18:14
  • 5
    как выглядит скрипт python, создающий этот вывод? import line_profiler;, а затем? – Rhubarb 11 March 2014 в 14:19

PyVmMonitor имеет живой просмотр, который может помочь вам там (вы можете подключиться к работающей программе и получить статистические данные из нее).

См.: http://www.pyvmmonitor.com /

0
ответ дан Fabio Zadrozny 18 August 2018 в 10:49
поделиться

Вы также можете использовать pprofile ( pypi ). Если вы хотите профилировать все исполнение, это не требует изменения исходного кода. Вы можете также профилировать подмножество более крупной программы двумя способами:

  • переключать профилирование при достижении определенной точки в коде, например:
    import pprofile
    profiler = pprofile.Profile()
    with profiler:
        some_code
    # Process profile content: generate a cachegrind file and send it to user.
    
  • переключение профилирования асинхронно из стека вызовов (требуется способ запуска этого кода в рассматриваемом приложении, например обработчик сигнала или доступный рабочий поток), используя статистическое профилирование:
    import pprofile
    profiler = pprofile.StatisticalProfile()
    statistical_profiler_thread = pprofile.StatisticalThread(
        profiler=profiler,
    )
    with statistical_profiler_thread:
        sleep(n)
    # Likewise, process profile content
    

Формат вывода аннотации кода очень похож на профилировщик строк:

$ pprofile --threads 0 demo/threads.py
Command line: ['demo/threads.py']
Total duration: 1.00573s
File: demo/threads.py
File duration: 1.00168s (99.60%)
Line #|      Hits|         Time| Time per hit|      %|Source code
------+----------+-------------+-------------+-------+-----------
     1|         2|  3.21865e-05|  1.60933e-05|  0.00%|import threading
     2|         1|  5.96046e-06|  5.96046e-06|  0.00%|import time
     3|         0|            0|            0|  0.00%|
     4|         2|   1.5974e-05|  7.98702e-06|  0.00%|def func():
     5|         1|      1.00111|      1.00111| 99.54%|  time.sleep(1)
     6|         0|            0|            0|  0.00%|
     7|         2|  2.00272e-05|  1.00136e-05|  0.00%|def func2():
     8|         1|  1.69277e-05|  1.69277e-05|  0.00%|  pass
     9|         0|            0|            0|  0.00%|
    10|         1|  1.81198e-05|  1.81198e-05|  0.00%|t1 = threading.Thread(target=func)
(call)|         1|  0.000610828|  0.000610828|  0.06%|# /usr/lib/python2.7/threading.py:436 __init__
    11|         1|  1.52588e-05|  1.52588e-05|  0.00%|t2 = threading.Thread(target=func)
(call)|         1|  0.000438929|  0.000438929|  0.04%|# /usr/lib/python2.7/threading.py:436 __init__
    12|         1|  4.79221e-05|  4.79221e-05|  0.00%|t1.start()
(call)|         1|  0.000843048|  0.000843048|  0.08%|# /usr/lib/python2.7/threading.py:485 start
    13|         1|  6.48499e-05|  6.48499e-05|  0.01%|t2.start()
(call)|         1|   0.00115609|   0.00115609|  0.11%|# /usr/lib/python2.7/threading.py:485 start
    14|         1|  0.000205994|  0.000205994|  0.02%|(func(), func2())
(call)|         1|      1.00112|      1.00112| 99.54%|# demo/threads.py:4 func
(call)|         1|  3.09944e-05|  3.09944e-05|  0.00%|# demo/threads.py:7 func2
    15|         1|  7.62939e-05|  7.62939e-05|  0.01%|t1.join()
(call)|         1|  0.000423908|  0.000423908|  0.04%|# /usr/lib/python2.7/threading.py:653 join
    16|         1|  5.26905e-05|  5.26905e-05|  0.01%|t2.join()
(call)|         1|  0.000320196|  0.000320196|  0.03%|# /usr/lib/python2.7/threading.py:653 join

Обратите внимание, что поскольку pprofile не полагается на модификацию кода, он может профилировать инструкции модуля верхнего уровня, позволяя профилировать время запуска программы (сколько времени требуется для импорта модулей, инициализировать глобальные переменные, ...).

Он может генерировать вывод в формате cachegrind, поэтому вы можете использовать kcachegrind , чтобы легко просматривать большие результаты.

Раскрытие: Я автор pprofile.

24
ответ дан vpelletier 18 August 2018 в 10:49
поделиться
  • 1
    +1 Спасибо за ваш вклад. Это выглядит хорошо. У меня есть немного другая перспектива - измерение единственного времени, сделанного заявлениями и функциями, является одной из целей. Выяснить, что можно сделать, чтобы сделать код быстрее, - это другая цель. Разница становится болезненно очевидной, поскольку код становится большим - например, 10 ^ 6 строк кода. Код может тратить большие проценты времени. Я нахожу это, беря небольшое количество очень подробных образцов и рассматривая их с человеческим глазом - не суммируя. Проблема раскрывается за долю времени, которое она тратит. – Mike Dunlavey 2 February 2015 в 15:18
  • 2
    Вы правы, я не упомянул использование pprofile, когда вы хотите профилировать меньшее подмножество. Я редактировал свой пост, чтобы добавить примеры этого. – vpelletier 3 February 2015 в 07:54
  • 3
Другие вопросы по тегам:

Похожие вопросы: