◐ Shell
clean mode source ↗

gh-117398: datetime: Support per-interpreter C-API by neonene · Pull Request #117399 · python/cpython

Closed

neonene

wants to merge 7 commits into

Conversation

@neonene

@neonene neonene commented

Mar 31, 2024

edited by bedevere-app Bot

Loading

This places C-API structure on a module state, which can be accessed through PyInterpreterState or a capsule.

Doc:

For modules using multi-phase initialization, e.g. PyModule_FromDefAndSpec(),
a separate module object is created and initialized for each interpreter.

Eclips4

PyObject *capsule = PyCapsule_New(capi, PyDateTime_CAPSULE_NAME,
datetime_destructor);
set_datetime_capi(st);
PyObject *capsule = PyCapsule_New(&st->capi, PyDateTime_CAPSULE_NAME, NULL);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain why do you pass a NULL as a capsule destructor?
Is there any reason not to have destructor for this capsule?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, the capsule just views a memory allocated and freed by the moduleobject.

if (m->md_state != NULL)
PyMem_Free(m->md_state);

Eclips4

@neonene

No futher experiment here.

@neonene

On second thought, exposing a module state to a user is dangerous.

2 participants

@neonene @Eclips4