Python、VTK和GIL发布

Python, VTK and GIL release

我正在尝试使用其 Python 接口在 VTK 中并行处理大型数据集。为此,我想使用 joblib,因为我有大量(大量)独立快照,我想处理这些快照并将其收集在一个大的 numpy 矩阵中,例如:

import vtk
from vtk.numpy_interface import dataset_adapter as dsa
for i,snap in enumerate(snapshot_list):
   myVtkFilter.SetInputData(snap)
   result = myVtkFilter.GetOutput()
   output[i, :] = dsa.WrapDataObject(result).CellData['myArray']

但是,我遇到了一些问题:

  1. 如果我使用默认的 loky 后端,Python 会抱怨输出矩阵不可写(这是一个非常大的数据集,矩阵如 (100, 1000000, 3))。无论如何,它需要由 loky 序列化这一事实将是一个主要的开销;
  2. 如果我想使用Python线程,代码运行正常,但在我看来,VTK大部分时间都没有释放GIL(大部分时间只使用一个内核的时间)。 我希望像 numpy 一样,VTK 调用应该释放 GIL(根据本发行说明http://vtk.1045678.n5.nabble.com/Announce-vtk-7-0-0-release-candidate-1-is-ready-td5735575.html),但事实并非如此。

我正在使用 Python 3.7.3 和 VTK 8.1.2。有什么建议吗?

VTK 8.2.0 中的 GIL 存在一些问题,已在此处修复:https://gitlab.kitware.com/paraview/paraview/-/issues/14169 并且修复存在于 VTK 9.0.1 中。

更新到 VTK 9.0.1 并使用 VTK_PYTHON_FULL_THREADSAFE=ON CMake 选项来解决您的问题。