Dask distributed.worker-警告-发送到计划程序的心跳失败

Dask distributed.worker-警告-发送到计划程序的心跳失败,dask,dask-distributed,Dask,Dask Distributed,我正在运行长时间运行的dask.delayed()作业(该作业使用子进程运行外部二进制文件来处理大型文件),由于所有工作人员都失去了调度程序通信,因此取消了未来: distributed.worker - WARNING - Heartbeat to scheduler failed 调度程序说: distributed.core - INFO - Event loop was unresponsive in Scheduler for 3.99s. This is often cause

我正在运行长时间运行的dask.delayed()作业(该作业使用子进程运行外部二进制文件来处理大型文件),由于所有工作人员都失去了调度程序通信,因此取消了未来:

distributed.worker - WARNING - Heartbeat to scheduler failed
调度程序说:

distributed.core - INFO - Event loop was unresponsive in Scheduler for 3.99s.  
This is often caused by long-running GIL-holding functions or moving large chunks of data.
This can cause timeouts and instability.

为什么会发生这种情况,我如何解决/修复它?据我所知,调度程序本身不运行任何python代码…

正如警告所述,worker的主线程暂时无法执行任何操作。这通常是由调用持有GIL的编译函数引起的。它们获取GIL,然后消失在编译代码中一段时间,不让任何其他Python代码(如心跳消息)运行


解决这个问题的正确方法是让编译后的代码发布GIL。如果您控制了这段代码,那么它在Cython中通常是一个简单的修复程序,现在,我认为,在cffi中是默认的。如果您只是调用
子流程
,那么对此我没有很好的解释。这不应该保留GIL。

我也是从一个运行cython/c任务的工人那里得到的。