[Stackless] Possible Answer and Advice Re:exceptions.TypeError: arg 5

Andrew Francis andrewfr_ice at yahoo.com
Mon Oct 12 18:08:06 CEST 2009


Hi Crispin:

> TypeError: arg 5 (closure) expected cell, found
> stackless._wrap.cell
> 
> The code is....
> 
> -----------------------------
> 
> import stackless
> import pickle
> 
> from twisted.web import client

This may not be quite answering your question but some suggestions since
I have done quite a bit of programming with Stackless and Twisted, including pickling.

1 - Twisted does not like being serialised. Before pickling tasklets, remove all references to Twisted. Structure your code so this is 
easy to do. You need layering.

2 - I looked at your code. Unless you are doing something really esoteric,
I would recommend you use client.getPage(). Here is a very very simple coding example from my Pycon 2008 talk, "Adventures in Stackless Twisted Integration."

!/usr/bin/envpython
import stackless
from twisted.web                      import client
from twisted.internet                 import reactor

#executes in reactor tasklet
def handleCallback(data):
    channel.send(data)

#execute in separate tasklet
def getWebPage(url):
    client.getPage(url).addCallback(handleCallback)
    print channel.receive()
    reactor.stop()

channel = stackless.channel()
stackless.tasklet(getWebPage)("http://www.google.com")
stackless.tasklet(reactor.run)()
stackless.run()

to generalise this, use the blockOn technique recommended by
Christopher Armstrong.

To do practical things, the code is a wee more sophisticated. I know this
is a shameless plug but read my slides. That said, give me about a week, and I will be publishing the slides and code for a new talk "A Survey of
Stackless Python"

Cheers,
Andrew


      




More information about the Stackless mailing list