[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."

import stackless
from twisted.web                      import client
from twisted.internet                 import reactor

#executes in reactor tasklet
def handleCallback(data):

#execute in separate tasklet
def getWebPage(url):
    print channel.receive()

channel = stackless.channel()

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"



More information about the Stackless mailing list