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
|Attachment||THRIFT-1107.compiler_generate_py_is_not_none.patch [ 12474368 ]|
|Status||Open [ 1 ]||Closed [ 6 ]|
|Fix Version/s||0.7 [ 12315360 ]|
|Resolution||Fixed [ 1 ]|
|Transition||Time In Source Status||Execution Times||Last Executer||Last Execution Date|
|14h 12m||1||Bryan Duxbury||23/Mar/11 18:15|