thread, multiprocessing: communication overhead
mk
mrkafk at gmail.com
Tue Dec 30 11:22:47 EST 2008
Aaron Brady wrote:
> snips
>> def threadsemfun():
>> sem = threading.Semaphore()
>> def threadlockfun():
>> sem = threading.Semaphore()
>
> You used a Semaphore for both lock objects here.
Right... I corrected that (simply changed to threading.Lock() in
threadlockfun) and the result is much better, though still an order of
magnitude worse than plain function:
Function: threadlockfun Best: 0.08665 sec Average: 0.08910 sec
Function: notfun Best: 0.00987 sec Average: 0.01003 sec
> 'multiprocessing' is a really high level layer that makes a lot of
> decisions about trade-offs, has highly redundant communication, and is
> really easy to use. If you want to save a byte, you'll have to make
> your own decisions about trade-offs and redundancies (possibly even
> looking at real result data to make them).
Hmm, do you think that lower-level 'thread' module might work more
efficiently?
> I actually think 'multiprocessing' is really good, and even if I hand-
> wrote my own IPC, it would be slower!
>
> CMIIW, but I believe your timing function includes the time to launch
> the actual processes and threads, create the synch. objects, etc. You
> might try it again, creating them first, starting the timer, then
> loading them.
Except I don't know how to do that using timeit.Timer. :-/
More information about the Python-list
mailing list