[
https://issues.apache.org/jira/browse/THRIFT-1107?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13009988#comment-13009988
]
Will Pierce commented on THRIFT-1107:
-------------------------------------
Output from benchmark script (test_isnotnone.py attached):
% for i in python2.4 python2.7 python3.1; do $i ./test_isnotnone.py 125; done
h2. Testing python v2.4.6, 125.0 million iterations
|| Code || Time Per Iteration (microseconds) || Total Test Elapsed Time
(seconds)
| x != None | 0.08892 usec/iteration | 11.115 total sec elapsed
| x is not None | 0.05089 usec/iteration | 6.361 total sec elapsed
h2. Testing python v2.7.0, 125.0 million iterations
|| Code || Time Per Iteration (microseconds) || Total Test Elapsed Time
(seconds)
| x != None | 0.06088 usec/iteration | 7.611 total sec elapsed
| x is not None | 0.03261 usec/iteration | 4.077 total sec elapsed
h2. Testing python v3.1.2, 125.0 million iterations
|| Code || Time Per Iteration (microseconds) || Total Test Elapsed Time
(seconds)
| x != None | 0.08650 usec/iteration | 10.813 total sec elapsed
| x is not None | 0.02976 usec/iteration | 3.720 total sec elapsed
> improvement for compiler-generated python for 'None' object comparisons
> -----------------------------------------------------------------------
>
> Key: THRIFT-1107
> URL: https://issues.apache.org/jira/browse/THRIFT-1107
> Project: Thrift
> Issue Type: Improvement
> Components: Python - Compiler
> Reporter: Will Pierce
> Assignee: Will Pierce
> Attachments: test_isnotnone.py
>
>
> The python code generator produces several python statements, especially the
> {{write()}} methods' per-field code, that compares something to None using
> '{{!= None}}', when it is more efficient to use the '{{is not None}}'
> expression.
> From what I understand, in python it's almost always true that ({{x \!=
> None}}) == ({{x is not None}}), but the actual implementation and intent is
> very different. The '{{\!= None}}' comparison does a by-value comparison
> that does much more work than an object identity '{{is not None}}' comparison
> does.
> The actual performance impact isn't much, but I benchmarked the performance
> of '{{x is not None}}' to '{{x \!= None}}' and got some interesting results.
> In python 2.4, 2.7 and 3.1, it's about 2-3 times as fast to use '{{is not
> None}}' over '{{\!= None}}'.
> I'll attach a patch to switch to 'is not None', and attach a simple benchmark
> test script exercising '{{is not None}}' vs. '{{\!= None}}' and post the
> performance measurements to this ticket.
> These URLs are somewhat relevant about this specific issue in general:
> * http://www.python.org/dev/peps/pep-0008/ (Search for 'singletons', or
> scroll to 'Programming Recommendations' item 2)
> *
> http://stackoverflow.com/questions/100732/why-is-if-not-someobj-better-than-if-someobj-none-in-python
> - Stack Overflow question about the same, though it veers into the cost of
> typecasting to bool, which isn't relevant here
> * http://jaredgrubb.blogspot.com/2009/04/python-is-none-vs-none.html - a
> similar experience and test results that match
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira