Yury Selivanov added the comment:

After some experiments, it looks like bind() is already pretty fast. The only 
way to increase its performance is to rewrite it in C.

I tried to approaches:

1. Refactor ._bind() to produce a high-level instruction set that can be 
cached, and is fast to iterate through and build BoundArguments.  Repo: 
https://github.com/1st1/cpython/tree/bind

Results:

====================================  ===========  ==============  
===============
function / call                       bind (3.4)   bind cache hit  bind cache 
miss
====================================  ===========  ==============  
===============
() / ()                               0.716s       0.746s  (-4%)   0.799s  
(-10%)
(a, b=1) / (10)                       1.140s       0.910s  (+20%)  1.294s  
(-12%)
(a, b=1, *ar) / (10, 20, 30, 40)      1.352s       1.145s  (+15%)  1.520s  
(-11%)
(a, b=1, **ar) / (10, 20, z=30, y=4)  1.364s       1.233s  (+10%)  1.660s  
(-18%)
(a, b=1, *, z, **ar) / (1,2,z=3,y=4)  1.499s       1.363s  (+10%)  1.897s  
(-26%)


2. Refactor ._bind() to compile a function that builds BoundArguments for te 
given args/kwargs shape.  This approach yields more-or-less same results as 
(1), but performance of cache-miss case is just terrible (-200%).  Compiling 
functions on the fly is expensive.  Repo to play with: 
https://github.com/1st1/cpython/tree/bind_jit


I'm closing this issue, until I (or someone else) can implement bind() in C (or 
come up with a faster pure-python implementation).

----------
resolution:  -> postponed
stage: needs patch -> resolved
status: open -> closed

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue23889>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to