[Twisted-Python] Ticket #8244 (old-style decorator)

Glyph glyph at twistedmatrix.com
Wed Mar 23 15:29:00 MDT 2016


> On Mar 23, 2016, at 2:10 PM, L. Daniel Burr <ldanielburr at me.com> wrote:
> 
> Hi Glyph,
> On March 23, 2016 at 1:39:53 PM, Glyph (glyph at twistedmatrix.com <mailto:glyph at twistedmatrix.com>) wrote:
> 
>> 
>>> On Mar 23, 2016, at 9:22 AM, L. Daniel Burr <ldanielburr at me.com <mailto:ldanielburr at me.com>> wrote:
>>> 
>>> My concern is that, should these classes be converted into hybrids via the @oldStyle decorator, my service may experience some reduction in the number of requests per second that it handles
>> 
>> If oldStyle converts the classes into hybrids, then it's broken.  Hybrids don't follow the semantics of old-style classes.  So this won't happen.
>> 
>>>  I should definitely test the results to see if there *is* a performance regression in my case.
>> 
>> My guess is that this is an insignificant micro-optimization and that pypy has gotten better at optimizing hybrids since that caution was written.  That said, we're really bad at paying attention to speed.twistedmatrix.com <http://speed.twistedmatrix.com/> and we really need a way to see pre-merge performance metrics rather than just a graph over time.
>> 
> 
> In the interest of putting my money where my mouth is, I’ve tested a very simple case, where I create a class inheriting from twisted.web.resource.Resource, and a subclass which mixes in “object”:

Thanks for doing this.
> So, not a huge difference, overall, and it might not even be visible over a long enough period of time.

Glad to hear it :).

With this in mind, my recommendations to most Twisted users is to start tacking on ", object" to the end[1] of your inheritance hierarchies, so that you get hybrid classes now, which will help you sort out any problems you will have by going fully new-style, at the cost of a small performance hit.  It'll be easier to suffer through <1% performance hit (0.7% by your metrics) for the next few releases and change nothing when the new-style release happens, than to be concerned about it breaking stuff.

-glyph

[1]: The end and ONLY THE END of the hierarchy; if you put 'object' first then when those classes go new-style you'll get an exception when declaring the class.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20160323/ad494b46/attachment-0002.html>


More information about the Twisted-Python mailing list