mysqldb + multi-threading

skip at pobox.com skip at pobox.com
Fri Sep 8 16:29:52 EDT 2006


    Bryan> MySQL has its own process. It doesn't know nor care whether your
    Bryan> application makes connections from different processes or
    Bryan> different threads in the same process.

Yes, but on the client side the data structures may or may not be
thread-safe.  A session on my web server:

    [skip at orca ~]$ python
    Python 2.3.4 (#1, Mar 10 2006, 06:12:09)
    [GCC 3.4.5 20051201 (Red Hat 3.4.5-2)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import MySQLdb
    >>> MySQLdb.threadsafety
    1
    >>> MySQLdb.version_info
    (1, 1, 7, 'final', 1)

Looking up threadsafety in PEP 249 we see:

    threadsafety

        Integer constant stating the level of thread safety the
        interface supports. Possible values are:

            0     Threads may not share the module.
            1     Threads may share the module, but not connections.
            2     Threads may share the module and connections.
            3     Threads may share the module, connections and
                  cursors.

So if you want to use multiple threads they can't share connections.

    >> My gut feeling is to use threads (note: each transaction is finite,
    >> so the process/thread die fairly quickly).

    Bryan> Go with your gut. Python threads are reasonably portable, and
    Bryan> work well on modern MS-Windows.

Maybe ignore your gut and read the documentation. ;-)

Skip



More information about the Python-list mailing list