[Python-Dev] Threading and synchronization primitives

skip@pobox.com skip at pobox.com
Thu Oct 13 18:07:07 CEST 2005


    Greg> All right then, how about putting it in a module called
    Greg> threadutils or something like that, which is clearly related to
    Greg> threading, but is open for the addition of future thread-related
    Greg> features that might arise.

Then Lock, RLock, Semaphore, etc belong there instead of in threading don't
they?

We have two things here, the basic thread object and the stuff it does (run,
start, etc) and the synchronization primitives.  Thread objects come in two
levels of abstraction: thread.thread and threading.Thread.  The
synchronization primitives come in three levels of abstraction: thread.lock,
threading.{Lock,Semaphore,...} and Queue.Queue.  Each level of abstraction
builds on the level below.

In the typical case I think we want to encourage programmers to use the
highest levels of abstraction available and leave the lower level stuff to
the real pros.  That means most programmers using threads should use
threading.Thread and Queue.Queue.  Partitioning the various classes to
different modules might look like this:

        Module        Thread Classes            Sync Primitives
        ------        --------------            ---------------
        _thread       thread                    lock
        threadutils                             Lock, RLock, Semaphore
        thread        Thread                    Queue

Programmers would clearly be discouraged from using the _thread module
(currently thread).  The typical case would be to import the thread module
(currently threading) and use its Thread and Queue objects.  For specialized
use the threadutils programmer can import the threadutils module to get at
the synchronization primitives it contains.

Skip


More information about the Python-Dev mailing list