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

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

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

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代码......

dask dask-distributed
1个回答
0
投票

正如警告所提到的那样,工人的主要线程暂时无法做任何事情。这通常是由调用保存在GIL上的编译函数引起的。他们抓住GIL然后消失在已编译的代码中一段时间​​,而不是让任何其他Python代码(如心跳消息)运行。

解决此问题的正确方法是让已编译的代码释放GIL。如果您可以控制这段代码,那么它通常是Cython中的一个简单修复,现在,我认为,默认是在cffi中。如果你只是打电话给subprocess那么我对此没有一个很好的解释。这不应该坚持GIL。

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