classification
Title: Review performance of inspect.getfullargspec
Type: performance Stage: needs patch
Components: Versions:
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: hroncok, ncoghlan, pablogsal, yselivanov, zzzeek
Priority: normal Keywords:

Created on 2019-05-22 12:19 by ncoghlan, last changed 2019-05-22 16:13 by pablogsal.

Messages (2)
msg343186 - (view) Author: Nick Coghlan (ncoghlan) * (Python committer) Date: 2019-05-22 12:19
(Splitting out a separate performance issue from https://bugs.python.org/issue36751#msg342683)

There can be two quite different reasons for inspecting a function signature:

* inspecting arbitrary functions to learn as much about them as possible in order to present good coding hints and other guidance to a developer
* inspecting function and method implementations passed to a runtime API in order to call them correctly

inspect.signature focuses on the former use case, and as a result ended up being markedly slower than the simpler inspect.getfullargspec implementation that it replaced.

At the moment, inspect.getfullargspec is being kept around solely as a backwards compatibility API - it calls inspect.signature internally, but then throws away the rich objects that function creates, replacing them with simple Python builtins.

It seems plausible that we could reverse that relationship, and instead have inspect.signature use inspect.getfullargspec as a lower level API that produces less self-descriptive output, but also avoids creating a lot of instances of custom Python objects.

(Sample performance data can be seen in https://gist.github.com/zzzeek/0eb0636fa3917f36ffd887d9f765c208)
msg343202 - (view) Author: mike bayer (zzzeek) * Date: 2019-05-22 15:39
thanks for creating this issue Nick!
History
Date User Action Args
2019-05-22 16:13:47pablogsalsetnosy: + yselivanov, pablogsal
2019-05-22 15:39:07zzzeeksetnosy: + zzzeek
messages: + msg343202
2019-05-22 12:25:27hroncoksetnosy: + hroncok
2019-05-22 12:19:41ncoghlancreate