我在dask.delayed工作负载上使用带有本地设置的dask-distributed (具有5个工作进程的LocalCluster)。大部分工作是由vtk Python绑定完成的。因为vtk是基于C++的,所以我认为这意味着在长时间运行的语句中,工作者不会释放GIL。当我运行工作负载时,我的终端打印出一堆错误,如下所示:
Traceback (most recent call last):
File "C:\Users\patri\AppData\Local\Continuum\anaconda3\lib\site-packages\distributed\comm\core.py", line 221, in connect
_raise(error)
File "C:\Users\patri\AppData\Local\Continuum\anaconda3\lib\site-packages\distributed\comm\core.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然而,我的工作负载仍然很好-我在命令行上收到了一堆错误,但它一直在继续。因此,我认为工作人员没有崩溃,但心跳通信停止。既然我不想为了发布GIL而搞乱vtk内部,我该如何修复这些错误呢?我收到了太多这样的良性超时错误,以至于我看不到可能发生的任何真正的错误。
发布于 2020-02-10 16:37:30
通过休眠VTK事件循环线程暂时释放GIL。如果您使用的是vtkWindowRendererInteractor实例,请使用内置的sleep创建一个带有回调的计时器,该回调会使执行稍作休眠。
https://stackoverflow.com/questions/60019241
复制相似问题