summaryrefslogtreecommitdiff
path: root/docs/config-directives/WSGIPythonOptimize.rst
blob: d2db4a726c7f29687a1e6dc33953e2eca6839a08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
==================
WSGIPythonOptimize
==================

:Description: Enables basic Python optimisation features.
:Syntax: ``WSGIPythonOptimize [0|1|2]``
:Default: ``WSGIPythonOptimize 0``
:Context: server config

Sets the level of Python compiler optimisations. The default is '0' which
means no optimisations are applied.

Setting the optimisation level to '1' or above will have the effect of
enabling basic Python optimisations and changes the filename extension for
compiled (bytecode) files from ``.pyc`` to ``.pyo``.

On the Windows platform, optimisation level of '0' apparently results in
the same outcome as if the optimisation level had been set to '1'.

When the optimisation level is set to '2', doc strings will not be
generated and thus not retained. This may techically result in a smaller
memory footprint if all ``.pyo`` files were compiled at this optimisation
level, but may cause some Python packages which interrogate doc strings in
some way to fail.

Since all the installed ``.pyo`` files in your Python installation are
not likely to be installed with level '2' optimisation, the gain from using
this level of optimisation will probably be negligible if any. This is
because potentially only the Python code for your own application code will
be compiled with this level of optimisation. This will be the case as the
``.pyo`` files will aready exist for modules in the standard Python
library and they will be used as is, rather than them being regenerated
with a higher level of optimisation than they might be. Use of level '2'
optimisation is therefore discouraged.

This directive will have no affect if mod_python is being loaded into Apache
at the same time as mod_wsgi as mod_python will in that case be responsible
for initialising Python.

Overall, if you do not understand what the normal 'python' executable '-O'
option does, how the Python runtime changes it behaviour as a result, and
you don't know exactly how your application would be affected by enabling
this option, then do not use this option. In other words, stop trying to
prematurely optimise the performance of your application through shortcuts.
You will get much better performance gains by looking at the design of your
application and eliminating bottlenecks within it and how it uses any
database. So, put the gun down and back away, it will be better for all
concerned.