[Twisted-Python] defer.inlineCallbacks dosn't work with cython, deferredGenerator does.

gelin yan dynamicgl at gmail.com
Thu Apr 19 03:10:11 MDT 2012


On Tue, Apr 10, 2012 at 1:32 PM, Glyph Lefkowitz <glyph at twistedmatrix.com>wrote:

>
> On Apr 9, 2012, at 9:50 PM, Andrew Bennetts wrote:
>
> > 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.
>
> Aah, I see.  So Twisted's check is a bit overzealous in the context of
> Cython.
>
> Could you perhaps wrap the Cython pseudo-generator in a function that
> converts it into something like a real Python generator, or disable the
> warning and see if it works as expected?  PEP 380 <
> http://www.python.org/dev/peps/pep-0380/> does have some code which one
> might use to do general-purpose iterator-to-generator conversion.
>
> In any case, please file a bug.  Search the tracker for duplicates first,
> of course, but there don't appear to be any.  There is some precedent for
> fixing this type of error, too: <http://twistedmatrix.com/trac/ticket/3132>
> was somewhat similar.
>
> -glyph
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>


Hi

   I come up with a link about this problem
http://groups.google.com/group/cython-users/browse_thread/thread/295937ae99fdfebe/9b0872a76e0172d8#9b0872a76e0172d8

feel free to check it. Thanks

Roughly, It can be concluded that cython has a different generator
implementation so that it can't work well with inlinecallback

Regards

gelin yan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20120419/14a91684/attachment.html>


More information about the Twisted-Python mailing list