[Twisted-Python] defer.inlineCallbacks dosn't work with cython, deferredGenerator does.
andrew at bemusement.org
Tue Apr 10 00:50:59 EDT 2012
On Tue, Apr 10, 2012 at 12:41:17PM +0800, gelin yan wrote:
> When trying to run inlineCallbacks with Cython, a TypeError would come
> out like:
> TypeError: inlineCallbacks requires <built-in function test> to produce a
> generator; instead got <cy3.__pyx_scope_struct__test object at 0x02808848)
> test is the function where inlineCallbacks uses.
> It looks like cython changes the name test to cy3.__pyx_scope_struct__test
> internally so generator can't work properly.
inlineCallbacks doesn't care what the function name is. The problem here is
that inlineCallbacks expects to be passed a generator function, and instead
it is being passed some other sort of object. The ugly cy3.__blah name is a red
 Without the check that produces this error, a common and very confusing
error is to decorate a non-generator function (i.e. one with no yield
statement) with @inlineCallbacks, which would appear to work but would then
mysteriously fail to do anything useful when executed.
More information about the Twisted-Python