[Stackless] Stackless with ZODB

Johan Carlsson johanc at easypublisher.com
Mon Sep 17 23:41:09 CEST 2007


Ok did some more testing...

I've god the latest standalond version of ZODB and I'm using the
standard config for a FileStorage and the following function:

def test_task(ch, data="No data"):
    i=1
    while 1:
        print i, "test_task", data
        data = ch.receive()
        i=i+1

root is the root ZODB mapping object.

root['talk'] = stackless.channel()
root['task']=stackless.tasklet(test_task)(root['talk'], "first data")
commit()

Now running root['talk'].send("hello") works fine the counter counts up.

Because tasklets and channels isn't Persistent-aware they need to be
rewritten, so after calling send on the channel for a couple of whiles
I do this:

root['task'] = root['task']
root['talk'] = root['talk']
commit()

closing down the database and restarting the Python and reopening the
ZODB database:

root['task'].insert() # to make add it to the current stackless scheduler.

and

root['task'].send("message")

Returns the next i from the calls before the commit above.
Just like you would expect :-D

So for now I'd say stackless plays nice with ZODB, at least
for a simple scenarios like this.

I'm guessing that putting all tasklets in a list in the ZODB and
initiate them at start up of the system would be a nice way to
run a Stackless persistent simulation (or something equal, like a game).

There might be problems with channels not being loaded, and if
something is gets thrown out of RAM I don't know what will happen.

Well, at least this wouldn't work with ORMs ;-D

I'll come back with more experiences when I have more ;-D

/Johan

-- 
Johan Carlsson
Colliberty Easy Publisher
http://www.easypublisher.com




More information about the Stackless mailing list