mirror of
https://github.com/kennethreitz/python-guide.git
synced 2026-06-05 14:50:19 +00:00
103 lines
2.0 KiB
ReStructuredText
103 lines
2.0 KiB
ReStructuredText
Speed
|
|
=====
|
|
|
|
CPython, the most commonly used implementation of Python, is slow for CPU bound
|
|
tasks. `PyPy`_ is fast.
|
|
|
|
Using a slightly modified version of `David Beazleys`_ CPU bound test code
|
|
(added loop for multiple tests), you can see the difference between CPython
|
|
and PyPy's processing.
|
|
|
|
::
|
|
|
|
PyPy
|
|
$ ./pypy -V
|
|
Python 2.7.1 (7773f8fc4223, Nov 18 2011, 18:47:10)
|
|
[PyPy 1.7.0 with GCC 4.4.3]
|
|
$ ./pypy measure2.py
|
|
0.0683999061584
|
|
0.0483210086823
|
|
0.0388588905334
|
|
0.0440690517426
|
|
0.0695300102234
|
|
|
|
::
|
|
|
|
CPython
|
|
$ ./python -V
|
|
Python 2.7.1
|
|
$ ./python measure2.py
|
|
1.06774401665
|
|
1.45412397385
|
|
1.51485204697
|
|
1.54693889618
|
|
1.60109114647
|
|
|
|
Context
|
|
:::::::
|
|
|
|
|
|
The GIL
|
|
-------
|
|
|
|
`The GIL`_ (Global Interpreter Lock) is how Python allows multiple threads to
|
|
operate at the same time. Python's memory management isn't entirely thread-safe,
|
|
so the GIL is requried to prevents multiple threads from running the same
|
|
Python code at once.
|
|
|
|
David Beazley has a great `guide`_ on how the GIL operates. He also covers the
|
|
`new GIL`_ in Python 3.2. His results show that maximizing performance in a
|
|
Python application requires a strong understanding of the GIL, how it affects
|
|
your specific application, how many cores you have, and where your application
|
|
bottlenecks are.
|
|
|
|
C Extentions
|
|
------------
|
|
|
|
|
|
The GIL
|
|
-------
|
|
|
|
`Special care`_ must be taken when writing C extensions to make sure you r
|
|
egister your threads with the interpreter.
|
|
|
|
C Extentions
|
|
::::::::::::
|
|
|
|
|
|
Cython
|
|
------
|
|
|
|
|
|
Pyrex
|
|
-----
|
|
|
|
|
|
Shedskin?
|
|
---------
|
|
|
|
|
|
|
|
Threading
|
|
:::::::::
|
|
|
|
|
|
Threading
|
|
---------
|
|
|
|
|
|
Spanwing Processes
|
|
------------------
|
|
|
|
|
|
Multiprocessing
|
|
---------------
|
|
|
|
|
|
.. _`PyPy`: http://pypy.org
|
|
.. _`The GIL`: http://wiki.python.org/moin/GlobalInterpreterLock
|
|
.. _`guide`: http://www.dabeaz.com/python/UnderstandingGIL.pdf
|
|
.. _`New GIL`: http://www.dabeaz.com/python/NewGIL.pdf
|
|
.. _`Special care`: http://docs.python.org/c-api/init.html#threads
|
|
.. _`David Beazleys`: http://www.dabeaz.com/GIL/gilvis/measure2.py
|