长时间运行的工作人员阻止GIL超时错误

问题描述 投票:0回答:1

我在dask.delayed工作负载上使用dask分发的本地设置(LocalCluster有5个工作程序)。大多数工作由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

但是,我的工作量仍然很好-在命令行上出现了很多错误,但是它一直在变化。所以我认为工作人员并没有崩溃,但是心跳停止了。由于我不想弄乱vtk内部组件来发布GIL,我该如何解决错误?这些良性超时错误很多,以至于我看不到任何可能发生的实际错误。

dask dask-distributed dask-delayed
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.