[pypy-issue] [issue948] Low performance on Stackless PyPy compared to Stackless Python
Carlos de Paula
tracker at bugs.pypy.org
Thu Dec 1 19:24:54 CET 2011
New submission from Carlos de Paula <carlosedp at gmail.com>:
I tested the 1.7 release on Windows XP using some Stackless Python examples I
have.
Most of them worked fine, the only problem is that the performance when using
Stackless is way slower than the 2.7.1 Stackless build from stackless.com
Here is one example:
Stackless Python 2.7.1
----------------------
E:\Dev\Python\Scripts\Stackless>\Apps\stackless2.7\python.exe speed.py
Started sleep for 5 seconds.
Started sleep for 0.2 seconds.
Started sleep for 2 seconds.
Started sleep for 1 seconds.
Started sleep for 3 seconds.
100000 operations took: 0.18700003624 seconds.
Woke after 0.2 seconds. ( 0.203000068665 )
200000 operations took: 0.344000101089 seconds.
300000 operations took: 0.5 seconds.
400000 operations took: 0.625 seconds.
500000 operations took: 0.733999967575 seconds.
Woke after 1 seconds. ( 1.0 )
Woke after 2 seconds. ( 2.0 )
Woke after 3 seconds. ( 3.0 )
Woke after 5 seconds. ( 5.0 )
PyPy 1.7
--------
E:\Dev\Python\Scripts\Stackless>..\..\..\sandbox\pypy-1.7\pypy.exe speed.py
Started sleep for 5 seconds.
Started sleep for 0.2 seconds.
Started sleep for 2 seconds.
Started sleep for 1 seconds.
Started sleep for 3 seconds.
Woke after 0.2 seconds. ( 0.234999895096 )
Woke after 1 seconds. ( 1.0 )
Woke after 2 seconds. ( 2.0 )
Woke after 3 seconds. ( 3.0 )
Woke after 5 seconds. ( 5.0 )
100000 operations took: 13.8280000687 seconds.
200000 operations took: 25.25 seconds.
300000 operations took: 34.3599998951 seconds.
400000 operations took: 41.2819998264 seconds.
500000 operations took: 46.015999794 seconds.
The example used is attached as 'speed.py'
Probably this is due to JIT being disabled when using Stackless features.
Other than the performance, it's working fine with some examples I tested from:
http://code.google.com/p/stacklessexamples/
----------
files: speed.py
messages: 3526
nosy: carlosedp, pypy-issue
priority: performance bug
status: unread
title: Low performance on Stackless PyPy compared to Stackless Python
________________________________________
PyPy bug tracker <tracker at bugs.pypy.org>
<https://bugs.pypy.org/issue948>
________________________________________
-------------- next part --------------
import stackless
import time
sleepingTasklets = []
def Sleep(secondsToWait):
'''
Yield the calling tasklet until the given number of seconds have passed.
'''
channel = stackless.channel()
endTime = time.time() + secondsToWait
sleepingTasklets.append((endTime, channel))
sleepingTasklets.sort()
# Block until we get sent an awakening notification.
channel.receive()
def CheckSleepingTasklets():
'''
Function for internal uthread.py usage.
'''
while stackless.getruncount() > 1 or sleepingTasklets:
if len(sleepingTasklets):
endTime = sleepingTasklets[0][0]
if endTime <= time.time():
channel = sleepingTasklets[0][1]
del sleepingTasklets[0]
# We have to send something, but it doesn't matter what as it is not used.
channel.send(None)
stackless.schedule()
stackless.tasklet(CheckSleepingTasklets)()
def doStuff(mult=1):
st = time.time()
c = 0
for i in xrange(int(100000*mult)):
c = c + 1
stackless.schedule()
print 100000*mult, " operations took: " , time.time() - st , " seconds."
def sleepalittle(howmuch):
print "Started sleep for", howmuch, " seconds."
st = time.time()
Sleep(howmuch)
print "Woke after ", howmuch, " seconds. (", time.time()-st, ")"
stackless.tasklet(doStuff)(1)
stackless.tasklet(sleepalittle)(5)
stackless.tasklet(sleepalittle)(0.2)
stackless.tasklet(doStuff)(2)
stackless.tasklet(doStuff)(3)
stackless.tasklet(sleepalittle)(2)
stackless.tasklet(sleepalittle)(1)
stackless.tasklet(sleepalittle)(3)
stackless.tasklet(doStuff)(4)
stackless.tasklet(doStuff)(5)
stackless.run()
More information about the pypy-issue
mailing list