Open
Description
If Julia's Threads.nthreads() > 1
, we may want to do some more work to ensure thread safety. In particular:
- Call
PyEval_InitThreads()
in__init__
(this is only needed for Python ≤ 3.6, and is a no-op in Python ≥ 3.7). - Acquire the GIL in the PyObject
finalizer
, by callingPyGILState_Ensure
(returns anenum
, i.e. aCint
in Julia) andPyGILState_Release
. This is because the Julia GC may be called from threads other than the main thread, so we need to ensure that we hold Python's GIL before decref-ing.
We might also expose an API to acquire the GIL, but in general I would recommend that user code should only call Python from the main thread.
See this forum post and #881 for a possible test case.