[Twisted-Python] defer.inlineCallbacks dosn't work with cython, deferredGenerator does.
Andrew Bennetts
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[1], and instead
it is being passed some other sort of object. The ugly cy3.__blah name is a red
herring.
-Andrew.
[1] 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
mailing list