[issue8995] Performance issue with multiprocessing queue (3.1 VS 2.6)

Bob report at bugs.python.org
Mon Jun 14 11:53:32 CEST 2010


New submission from Bob <for_elise03 at yahoo.fr>:

Hi,

I've found a strange performance issue when comparing queue.queue and multiprocessing.queue in python 2.6 and 3.1

My program creates a queue, and do 1 million put and get operations on either a small data or a "big" array.

My code: (This is the 3.1 version. Switch module name from queue to Queue to run on 2.6)

####################################################################
import multiprocessing
import queue

def with_queue(queuetype,datatype):
    if queuetype == 'multi':
        q = multiprocessing.Queue(1000)
    else:
        q = queue.Queue(1000)

    if datatype == 'small':
        data = 'some data'
    else:
        data = []
        for i in range(1000):
            data.append(i)
           
    for d in range(1000000):
        q.put(data)
        q.get()
       
if __name__=='__main__':
    from timeit import Timer
    t1 = Timer("with_queue('simple','small')","from __main__ import with_queue")
    t2 = Timer("with_queue('simple','big')","from __main__ import with_queue")
    t3 = Timer("with_queue('multi','small')","from __main__ import with_queue")
    t4 = Timer("with_queue('multi','big')","from __main__ import with_queue")
   
    print ('Using queue.Queue with small data            : ',t1.timeit(1))
    print ('Using queue.Queue with huge data             : ',t2.timeit(1))
    print ('Using multiprocessing.Queue with small data  : ',t3.timeit(1))
    print ('Using multiprocessing.Queue with huge  data  : ',t4.timeit(1))
#####################################################################

And the results (on my linux box:)

python2.6 read_write.py
    Using queue.Queue with small data            :  10.31s
    Using queue.Queue with huge data             :  10.39s
    Using multiprocessing.Queue with small data  :  33.85s
    Using multiprocessing.Queue with huge  data  :  155.38s

python3.1 read_write.py
    Using queue.Queue with small data            :  10.68s
    Using queue.Queue with huge data             :  10.61s
    Using multiprocessing.Queue with small data  :  50.27s
    Using multiprocessing.Queue with huge  data  :  472.49s


As you can see 3.1 is 50% slower than 2.6 in the third test; but 300 % slower in the 4th test.
If i go further with bigger data, 3.1 run for hours ... and i have to kill it before any result shows.
Am i doing something wrong or is there any known issue in 3.1 that can explain this ?

Thanks !

Bob

----------
components: Extension Modules
messages: 107775
nosy: bob
priority: normal
severity: normal
status: open
title: Performance issue with multiprocessing queue (3.1 VS 2.6)
type: performance
versions: Python 2.6, Python 3.1

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue8995>
_______________________________________


More information about the Python-bugs-list mailing list