[vtkusers] VTK 7.0.0 + Python: GIL released?
Paul Melis
paul.melis at surfsara.nl
Thu Sep 8 08:57:49 EDT 2016
Good to know, thanks!
Paul
From: "Mathieu Westphal" <mathieu.westphal at kitware.com>
To: "Paul Melis" <paul.melis at surfsara.nl>
Cc: "vtk" <vtkusers at vtk.org>
Sent: Thursday, 8 September, 2016 14:30:23
Subject: Re: [vtkusers] VTK 7.0.0 + Python: GIL released?
Hi
Sorry, I did not see you were only on VTK.
The option is exposed in ParaView cmake option, the same way VTK_NO_PYTHON_THREAD is.
But you should be able to define the option manually when configuring VTK.
-DVTK_PYTHON_FULL_THREADSAFE:BOOL="ON"
Regards,
Mathieu Westphal
On Thu, Sep 8, 2016 at 2:11 PM, Paul Melis < paul.melis at surfsara.nl > wrote:
Great! But the VTK_PYTHON_FULL_THREADSAFE option doesn't seem to exist at the CMake level. With a git update of a minute ago:
/data/c/vtk-git$ find . -name CMakeLists.txt | xargs -iX grep -Hs VTK_PYTHON_FULL_THREADSAFE X
<empty>
/data/c/vtk-git$ find . | xargs -iX grep -Hs VTK_PYTHON_FULL_THREADSAFE X
./Utilities/PythonInterpreter/vtkPythonInterpreter.cxx:#ifdef VTK_PYTHON_FULL_THREADSAFE
./Utilities/Python/vtkPythonConfigure.h.in:#cmakedefine VTK_PYTHON_FULL_THREADSAFE
./Utilities/Python/vtkPython.h:// Note: behaviour of this class depends on VTK_PYTHON_FULL_THREADSAFE.
./Utilities/Python/vtkPython.h: // If force is TRUE, lock/unlock even if VTK_PYTHON_FULL_THREADSAFE is not defined.
./Utilities/Python/vtkPython.h: // If force is FALSE, lock/unlock is only performed if VTK_PYTHON_FULL_THREADSAFE is
./Utilities/Python/vtkPython.h:#ifdef VTK_PYTHON_FULL_THREADSAFE
./Utilities/Python/vtkPython.h: // Force is always true with VTK_PYTHON_FULL_THREADSAFE
/data/c/vtk-git-release$ cmake -D VTK_WRAP_PYTHON=ON ../vtk-git
...
/data/c/vtk-git-release$ grep VTK_PYTHON_FULL_THREADSAFE CMakeCache.txt
<empty>
/data/c/vtk-git-release$ grep THREAD CMakeCache.txt
CMAKE_THREAD_LIBS:STRING=-lpthread
LIBPROJ_USE_THREAD:BOOL=ON
VTK_MAX_THREADS:STRING=64
CMAKE_HAVE_PTHREADS_CREATE:INTERNAL=
CMAKE_HAVE_PTHREAD_CREATE:INTERNAL=1
CMAKE_HAVE_PTHREAD_H:INTERNAL=1
//ADVANCED property for variable: CMAKE_THREAD_LIBS
CMAKE_THREAD_LIBS-ADVANCED:INTERNAL=1
H5_HAVE_PTHREAD_H:INTERNAL=1
H5_SYSTEM_SCOPE_THREADS:INTERNAL=1
HAVE_PTHREAD_H:INTERNAL=1
//Have symbol PTHREAD_MUTEX_RECURSIVE
HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN:INTERNAL=
HDF5_ENABLE_THREADSAFE:INTERNAL=OFF
//ADVANCED property for variable: LIBPROJ_USE_THREAD
LIBPROJ_USE_THREAD-ADVANCED:INTERNAL=1
SYSTEM_SCOPE_THREADS:INTERNAL=TRUE
//ADVANCED property for variable: VTK_MAX_THREADS
VTK_MAX_THREADS-ADVANCED:INTERNAL=1
Paul
From: "Mathieu Westphal" < mathieu.westphal at kitware.com >
To: "Paul Melis" < paul.melis at surfsara.nl >
Cc: "vtk" < vtkusers at vtk.org >
Sent: Thursday, 8 September, 2016 13:51:18
Subject: Re: [vtkusers] VTK 7.0.0 + Python: GIL released?
Hi
All python calls are protected by gil if the VTK_PYTHON_FULL_THREADSAFE option is on.
The mechanism take place in vtkPython.h, where the vtkPythonScopeGilEnsurer is configured by the cmake option.
the vtkPythonScopeGilEnsurer is then ( suposed to be ) used before every pthon call.
Regards,
Mathieu Westphal
On Thu, Sep 8, 2016 at 1:23 PM, Paul Melis < paul.melis at surfsara.nl > wrote:
BQ_BEGIN
Hi all,
What's the status of threading in VTK 7.0.0 under Python w.r.t the GIL,
specifically for classes derived from vtkAlgorithm?
I'm attempting to offload a computation (basically vtkStreamTracer.Update())
to a Python threading.Thread, but strongly get the impression that
the GIL is not released by Update().
The release notes ( https://blog.kitware.com/vtk-7-0-0/ ) seem to suggest
there was some recent development in this area:
* multi-threaded Python codes facilitated by VTK's new and optional
protocol for using the Global Interpreter Lock
But clicking the link appears to indicate this is for VTK used inside
Paraview only. I see the mentioned cmake variable VTK_PYTHON_FULL_THREADSAFE
referenced by files under Utilities/Python, but the cmake files themselves
don't contain a reference, nor something like an option. Would hacking
the define in somewhere cause Update() to be protected by the GIL?
Commit https://github.com/Kitware/VTK/commit/8eb50dd23fd762d42fe1a6785bbaa704f2ed76c3
lists some classes and their possible protection by vtkPythonScopeGilEnsurer,
but what specifically is covered isn't entirely clear to me.
Thanks,
Paul
--
Paul Melis
| Visualization group leader & developer | SURFsara |
| Science Park 140 | 1098 XG Amsterdam |
| T 020 800 1312 | paul.melis at surfsara.nl | www.surfsara.nl |
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
Search the list archives at: http://markmail.org/search/?q=vtkusers
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers
BQ_END
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160908/344b04ba/attachment.html>
More information about the vtkusers
mailing list