长时间运行的工作线程阻止 GIL 超时错误



我在dask.delay工作负载上使用dask-distribution和本地设置(LocalCluster有5个worker(。大部分工作都是由 vtk Python 绑定完成的。由于 vtk 是基于C++的,我认为这意味着工人在长期运行的语句中不会释放 GIL。当我运行工作负载时,我的终端会打印出一堆错误,如下所示:

Traceback (most recent call last):
File "C:UserspatriAppDataLocalContinuumanaconda3libsite-packagesdistributedcommcore.py", line 221, in connect
_raise(error)
File "C:UserspatriAppDataLocalContinuumanaconda3libsite-packagesdistributedcommcore.py", line 204, in _raise
raise IOError(msg)
OSError: Timed out trying to connect to 'tcp://127.0.0.1:49721' after 10 s: connect() didn't finish in time

但是,我的工作量仍然很好 - 我在命令行上收到一堆错误,但它一直在咯咯作响。所以我认为工人们没有崩溃,但心跳通信停止了。由于我不想弄乱 vtk 内部来发布 GIL,我该如何修复错误?我收到了很多这些良性超时错误,以至于我看不到可能发生的任何实际错误。

通过休眠 VTK 事件循环线程来暂时释放 GIL。 如果您使用的是vtkWindowRendererInteractor实例,请创建一个带有回调的计时器,该计时器使用内置的sleep使执行稍作休眠。

最新更新