distribution.worker-警告-调度程序的心跳失败

时间:2019-02-19 15:29:56

标签: 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 caused by long-running GIL-holding functions or moving large chunks of data.
This can cause timeouts and instability.

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

1 个答案:

答案 0 :(得分:0)

正如警告所提到的,worker的主线程暂时无法执行任何操作。这通常是由调用保留在GIL上的已编译函数引起的。他们抓住了GIL,然后消失了一段时间,不再运行任何其他Python代码(如心跳消息)。

解决此问题的正确方法是让编译后的代码发布GIL。如果您可以控制此代码,则通常可以在Cython中轻松解决,现在,我认为现在是cffi中的默认设置。如果您只是打电话给subprocess,那么我对此没有很好的解释。那不应该保留在GIL上。