Dino Viehland <[email protected]> added the comment:
Setup a micro-benchmark, foo.c:
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <string.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
wchar_t *program = Py_DecodeLocale(argv[0], NULL);
if (program == NULL) {
fprintf(stderr, "Fatal error: cannot decode argv[0]\n");
exit(1);
}
Py_SetProgramName(program); /* optional but recommended */
Py_Initialize();
PyObject *pName = PyUnicode_DecodeFSDefault("foo");
if (pName == NULL) { printf("no foo\n"); PyErr_Print(); }
PyObject *pModule = PyImport_Import(pName);
if (pModule == NULL) { printf("no mod\n"); PyErr_Print(); return 0; }
PyObject *cls = PyObject_GetAttrString(pModule, "C");
if (cls == NULL) { printf("no cls\n"); }
PyObject *fs[20];
for(int i = 0; i<20; i++) {
char buf[4];
sprintf(buf, "f%d", i);
fs[i] = PyUnicode_DecodeFSDefault(buf);
}
for(int i = 0; i<100000000; i++) {
for(int j = 0; j<20; j++) {
if(_PyType_Lookup(cls, fs[j])==NULL) {
printf("Uh oh\n");
}
}
}
if (Py_FinalizeEx() < 0) {
exit(120);
}
PyMem_RawFree(program);
return 0;
}
Lib/foo.py:
import time
class C:
pass
for i in range(20):
setattr(C, f"f{i}", lambda self: None)
obj hash: 0m6.222s
str hash: 0m6.327s
baseline: 0m6.784s
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue43452>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com