Adjust doc about threading

There are two ways to give other greenthread chance to run:
greenthread.sleep(0) or time.sleep(0). Add the second way in
threading.rst and recommend the first way for contributors.

Also, PyMySQL works well with eventlet [1], and it's the default MySQL
DB API driver for oslo.db now[2].
So adjust 'threading model' doc with such info.

[1] https://wiki.openstack.org/wiki/PyMySQL_evaluation
[2] http://docs.openstack.org/developer/oslo.db/installation.html

Change-Id: Ifcf48cddcf52ce720ceb275cc3eb4d6be61a3ca5
This commit is contained in:
ChangBo Guo(gcb) 2016-09-09 15:02:10 +08:00 committed by ChangBo Guo(gcb)
parent 5c794d4f98
commit 7b0505bf5e

View File

@ -32,13 +32,19 @@ delays in the case that there is only a single green thread::
...
greenthread.sleep(0)
In current code, time.sleep(0) does the same thing as greenthread.sleep(0)
if time module is patched through eventlet.monkey_patch(). To be explicit,
we recommend contributors to use ``greenthread.sleep()`` instead of
``time.sleep()``.
MySQL access and eventlet
-------------------------
Queries to the MySQL database will block the main thread of a service. This is
because OpenStack services use an external C library for accessing the MySQL
database. Since eventlet cannot use monkey-patching to intercept blocking
calls in a C library, the resulting database query blocks the thread.
There are some MySQL DB API drivers for oslo.db, like `PyMySQL`_, MySQL-python,
etc. PyMySQL is the default MySQL DB API driver for oslo.db, and it works well
with eventlet. MySQL-python uses an external C library for accessing the MySQL
database. Since eventlet cannot use monkey-patching to intercept blocking calls
in a C library, queries to the MySQL database will block the main thread of a
service.
The Diablo release contained a thread-pooling implementation that did not
block, but this implementation resulted in a `bug`_ and was removed.
@ -49,3 +55,4 @@ a discussion of the `impact on performance`_.
.. _bug: https://bugs.launchpad.net/manila/+bug/838581
.. _mailing list thread: https://lists.launchpad.net/openstack/msg08118.html
.. _impact on performance: https://lists.launchpad.net/openstack/msg08217.html
.. _PyMySQL: https://wiki.openstack.org/wiki/PyMySQL_evaluation