[Stackless-checkins] CVS: slpdev/src/2.3/dev/Stackless/test taskspeed.py, 1.21, 1.22
Christian Tismer
tismer at centera.de
Mon May 24 03:01:23 CEST 2004
Update of /home/cvs/slpdev/src/2.3/dev/Stackless/test
In directory centera.de:/tmp/cvs-serv31331/test
Modified Files:
taskspeed.py
Log Message:
This is Stackless 3.1 alpha.
Stackless is supporting Real Threads!
There are a few glitches: The unit tests don't pass all, yet.
Revive_main has been dropped in favor of a global
dead-lock check. Maybe this needs a bit more work.
There is a global interthread lock. I'm not sure whether it is really needed.
Anyway, this thing works nicely with threads. I'm very happy to release
this new version, after a full week of day and night hacking.
Btw.: channels are not working compatibly, right now. Their policy
to prefer receivers to be unlocked is not set at the moment.
I will set the default back, ASAP and provide a computed attribute
to control this with the next check-in.
Index: taskspeed.py
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/test/taskspeed.py,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** taskspeed.py 12 May 2004 15:33:56 -0000 1.21
--- taskspeed.py 24 May 2004 01:01:21 -0000 1.22
***************
*** 1,5 ****
# speed test
! from __future__ import generators
! import time, sys
class StacklessError(Exception): pass
--- 1,4 ----
# speed test
! import time, sys, thread
class StacklessError(Exception): pass
***************
*** 48,51 ****
--- 47,56 ----
sched(); sched(); sched(); sched(); sched()
+ def cleanup():
+ # kill uncollectables from hard switching and threads
+ for task in stackless.uncollectables:
+ if task.blocked:
+ task.kill()
+
def tester(func, niter, args, msg, ntasks=10, run=run):
print "%8d %s" % (niter, msg, ),
***************
*** 59,63 ****
run()
diff = clock() - start
! print "took %9.5f seconds, rate = %10d/s" % (diff, niter/diff)
except StacklessError:
print "could not run, this is not Stackless"
--- 64,69 ----
run()
diff = clock() - start
! print "took %9.5f seconds, rate = %10d/s" % (diff, long(niter/diff))
! cleanup()
except StacklessError:
print "could not run, this is not Stackless"
***************
*** 75,79 ****
for i in gf(n):pass
! def channel_sender(send):
while 1:
send(42); send(42); send(42); send(42); send(42);
--- 81,87 ----
for i in gf(n):pass
! def channel_sender(send, nest=0):
! if nest:
! return channel_sender(send, nest-1)
while 1:
send(42); send(42); send(42); send(42); send(42);
***************
*** 82,89 ****
send(42); send(42); send(42); send(42); send(42);
! def chantest(n):
chan = channel()
! tasklet(channel_sender)(chan.send)
recv = chan.receive
for i in xrange(0, n, 20):
recv(); recv(); recv(); recv(); recv()
--- 90,113 ----
send(42); send(42); send(42); send(42); send(42);
! def chantest(n, nest=0, use_thread=False):
! if nest:
! return chantest(n, nest-1, use_thread)
chan = channel()
! if use_thread:
! thread.start_new_thread(channel_sender, (chan.send,))
! # wait for thread
! while not chan.balance:
! schedule()
! else:
! tasklet(channel_sender)(chan.send)
recv = chan.receive
+ def xrecv():
+ if chan.balance:
+ print "receiving from", id(chan.queue), "siblings=", getruncount()
+ else:
+ print "blocking"
+ chan.receive()
+ getcurrent().next.run()
+ schedule()
for i in xrange(0, n, 20):
recv(); recv(); recv(); recv(); recv()
***************
*** 92,99 ****
recv(); recv(); recv(); recv(); recv()
niter = 10000000
if stackless.debug:
! niter = 20
if args_given:
--- 116,128 ----
recv(); recv(); recv(); recv(); recv()
+ if 0:
+ def cb(*args):
+ print args
+ set_channel_callback(cb)
+
niter = 10000000
if stackless.debug:
! niter = 20000
if args_given:
***************
*** 108,114 ****
res.append(tester(test_cframe_nr, niter, (), "cframe softswitches"))
enable_softswitch(0)
! res.append(tester(chantest, niter, (), "channel s/r hard "))
enable_softswitch(1)
! res.append(tester(chantest, niter, (), "channel s/r soft "))
res.append(tester(f, niter, (lambda:0,), "function calls "))
res.append(tester(gentest, niter, (), "generator calls "))
--- 137,145 ----
res.append(tester(test_cframe_nr, niter, (), "cframe softswitches"))
enable_softswitch(0)
! res.append(tester(chantest, niter, (), "channel hard top "))
! res.append(tester(chantest, niter, (3,), "channel hard nest 3"))
enable_softswitch(1)
! res.append(tester(chantest, niter, (), "channel soft "))
! res.append(tester(chantest, niter//10, (0, 1), "channel real thread"))
res.append(tester(f, niter, (lambda:0,), "function calls "))
res.append(tester(gentest, niter, (), "generator calls "))
***************
*** 140,149 ****
# clear all tasklets
run()
! # kill uncollectables from hard switching
! task = None
! for task in stackless.uncollectables:
! if task.blocked:
! task.kill()
! del task
results_2002_07_28 = """
--- 171,175 ----
# clear all tasklets
run()
! cleanup()
results_2002_07_28 = """
_______________________________________________
Stackless-checkins mailing list
Stackless-checkins at stackless.com
http://www.stackless.com/mailman/listinfo/stackless-checkins
More information about the Stackless-checkins
mailing list