[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