py::print doesn't acquire the GIL ? #5559
Unanswered
HunterBelanger
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
I have a library which uses spdlog for the output, and to make sure things work properly with Jupyter notebooks, I use custom made sinks which just call
py::print
to make sure everything goes through the Python stdout. In modifying this library to work with threading in Python, I noticed that when multiple threads try writing to the log, I get GIL errors, because multiple threads are trying to output at the same time. If I add apy::gill_scoped_acquire
right before I callpy::print
, this problem does not occur (which makes sense to me).I was just surprised by this behavior though, as based on the GIL documentation, I would have expected
py::print
to acquire the GIL automatically. It seems to me thatpy::detail::print
should have agil_scoped_acquire
to prevent this issue, as from what I can tell, it will always be accessing a Python object when writing. Is there a reason to not have this here that I am missing ? If this is something that should be there, I am happy to add it myself; I just want to make sure there isn't a reason to not have it, or there isn't a better way to accomplish this.Beta Was this translation helpful? Give feedback.
All reactions