[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