BUG: Release the Python Global Interpreter Lock (GIL) during execution#1065
Merged
thewtex merged 3 commits intoInsightSoftwareConsortium:releasefrom Jul 12, 2019
Merged
Conversation
Release the Python Global Interpreter Lock (GIL) so multi-threaded Python applications, like Dask, can run in parallel while ITK does heavy operations. For more information, see section 32.13 Support for Multithreaded Applications at http://www.swig.org/Doc4.0/Python.html#Python Also, set `nothreadallow` as suggested in the comments on swig/swig#927. This avoids calls to `PyEval_SaveThread()` and `PyEval_RestoreThread()`, which can negatively effect performance. This change only affects module C++ code -- code that can call Python code like ITKPyUtils does not have `threads` enabled.
Member
|
The GIL should be reacquired when calling Python call backs. See SimpleITK for an example: |
Obtain and return the Python Global Interpreter Lock state before and after running Python commands to ensure the correct interpreter when Python is running threads. Based on sitkPyCommand.cxx. See also: https://docs.python.org/3/c-api/init.html#non-python-created-threads
Member
Author
|
@blowekamp thanks for the pointer! Added in 3eb1f6a |
Member
|
LGTM |
dzenanz
approved these changes
Jul 9, 2019
7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release the Python Global Interpreter Lock (GIL) so multi-threaded
Python applications, like Dask, can run in parallel while ITK does heavy
operations.
For more information, see section 32.13 Support for Multithreaded
Applications at
http://www.swig.org/Doc4.0/Python.html#Python
Also, set
nothreadallowas suggested in the commentson swig/swig#927. This avoids calls to
PyEval_SaveThread()andPyEval_RestoreThread(), which can negativelyeffect performance. This change only affects module C++ code -- code
that can call Python code like ITKPyUtils does not have
threadsenabled.