Компиляция Python

Мне было любопытно на предмет этого самому. Это - весь штраф для чтения документации и теоретических ответов, но мне нравится балансировать тех, которые имеют эмпирическое доказательство.

у меня есть таблица MySQL (InnoDB), который имеет 5 607 997 записей в ней. Таблица находится в моей собственной частной песочнице, таким образом, я знаю, что содержание статично, и никто больше не использует сервер. Я думаю, что это эффективно удаляет все внешнее влияние на производительности. У меня есть таблица с auto_increment полем Primary Key (идентификатор), который я, никогда знаю не будет пустым, который я буду использовать для моего, где тест пункта (ГДЕ идентификатор ЯВЛЯЕТСЯ NOT NULL).

Единственный другой возможный незначительный сбой я вижу в запущении тестов, кэш. В первый раз запрос выполняется, всегда будет медленнее, чем последующие запросы, которые используют те же индексы. Я обращусь к этому ниже как вызов Отбора кэша. Только для спутывания его немного я выполнил его с, где пункт, который я знаю, будет всегда оценивать к истинному независимо от любых данных (TRUE = TRUE).

, Который сказал вот, мои результаты:

КОЛИЧЕСТВО QueryType

      |  w/o WHERE          | where id is not null |  where true=true

()

      |  9 min 30.13 sec ++ | 6 min 16.68 sec ++   | 2 min 21.80 sec ++
      |  6 min 13.34 sec    | 1 min 36.02 sec      | 2 min 0.11 sec 
      |  6 min 10.06 se     | 1 min 33.47 sec      | 1 min 50.54 sec

КОЛИЧЕСТВО (идентификатор)

      |  5 min 59.87 sec    | 1 min 34.47 sec      | 2 min 3.96 sec 
      |  5 min 44.95 sec    | 1 min 13.09 sec      | 2 min 6.48 sec

КОЛИЧЕСТВО (1)

      | 6 min 49.64 sec    | 2 min 0.80 sec       | 2 min 11.64 sec
      | 6 min 31.64 sec    | 1 min 41.19 sec      | 1 min 43.51 sec

++ Это считают вызовом Отбора кэша. Это, как ожидают, будет медленнее, чем остальные.

я сказал бы, что результаты выступают за себя. КОЛИЧЕСТВО (Айдахо) обычно вычеркивает другие. Добавление оператора Where существенно уменьшает время доступа, даже если это будет пункт, который Вы знаете, то оценит к истинному. Зона наилучшего восприятия, кажется, КОЛИЧЕСТВО (идентификатор)... ГДЕ идентификатор ЯВЛЯЕТСЯ NOT NULL.

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

47
задан system PAUSE 16 September 2009 в 17:26
поделиться

7 ответов

python yourfile.py

You have to have python installed first. It will automatically compile your file into a .pyc binary, and then run it for you. It will automatically recompile any time your file changes.

http://www.python.org/download/

29
ответ дан 26 November 2019 в 19:47
поделиться

Python compiles its files to bytecode before executing them. That means you have to have a Python interpreter installed on the target machine.

If you don't want to install Python on the target machine use py2exe, py2app or something similar.

15
ответ дан 26 November 2019 в 19:47
поделиться

Чтобы добавить к ответу Пола Макмиллана , если вы работаете в Windows и у вас установлен Python, то любые файлы, заканчивающиеся расширением «.py», должны быть связаны с исполняемый файл python , позволяющий запускать его следующим образом:

> myfile.py

В * nix вы можете начать файл с #! / Usr / bin / python и запустить его следующим образом:

$ ./myfile.py

В системах * nix, если первые два символа файла равны #! , тогда он выполнит файл с указанным исполняемым файлом, который я здесь установил как / usr / bin / python .

5
ответ дан 26 November 2019 в 19:47
поделиться

Python is an interpreted language, so you don't need to compile it; just to run it. As it happens, the standard version of python will compile this to "bytecode", just like Java etc. does, and will save that (in .pyc files) and run it next time around, saving time, if you haven't updated the file since. If you've updated the file, it will be recompiled automatically.

You can also run python with a -O flag, which will generate .pyo files instead of .pyc. I'm not sure it makes much difference. If speed is important, use psyco.

And yes, on Unix (including Linux, BSD, and Mac OS X, or in a unix shell on windows) you can use a shebang line at the top of the file to make the file automatically run using python. On windows, the equivalent is to associate .py files with python.exe, and then make sure your PATHEXT environment variable includes ".PY" extensions.

However, for windows, you more likely want to write a gui program in python (possibly using PyQT4 and ERIC4) which has a .pyw file as its main script, and has .pyw associated with pythonw (which comes with python on windows). This will let you run python scripts on windows just like other GUI programs. For publishing and distribution, you probably want to compile to an executable file using something like py2exe, as others mentioned.

8
ответ дан 26 November 2019 в 19:47
поделиться

Если вы хотите преобразовать исходный файл python в .exe , который можно дважды щелкнуть в Windows, вы можете использовать py2exe , который может вам помочь создать простой для распространения пакет.

3
ответ дан 26 November 2019 в 19:47
поделиться

В большинстве Unix-подобных систем вы можете использовать shebang, чтобы сообщить операционной системе, какой интерпретатор следует вызвать. Вы просто помещаете

#!/path/to/python 

в первую строку вашего файла, где, конечно, вы должны заменить «/ path / to /» на путь, который у вас есть в вашей системе. В большинстве случаев это будет «/ usr / bin / python» или «/ usr / local / bin / python». В системах unix вы также можете искать путь с помощью

"#!usr/bin/env python" 

или вызывать команду

which python

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

./yourprogram.py

. Если она сообщает вам, что у вас нет разрешения на это, вы должны использовать команду

chmod a+x yourprogram.py
1
ответ дан 26 November 2019 в 19:47
поделиться

Если вы просто хотите скомпилировать исходники, не запуская их, вы можете сделать это

compileall.py <directory>

эта команда будет рекурсивно компилировать код Python в этом каталоге

compileall скрипт обычно находится в каталоге, например

/usr/local/lib/python2.6

, т.е. /lib/python2.6 (или аналогичный, в зависимости от префиксов, устанавливающих конфигурацию python)

Как предлагает Лулу, вы должны убедиться, что получающиеся .pyc и Файлы .pyo исполняются заинтересованными вами пользователями.

compileall также может использоваться как модуль

import compileall
compileall.compile_dir(path)
12
ответ дан 26 November 2019 в 19:47
поделиться
Другие вопросы по тегам:

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