-
Notifications
You must be signed in to change notification settings - Fork 187
Open
Labels
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. aCintin 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.
x66ccff