从 jupyter notebook 使用它时,我看到了 dask 的奇怪行为。所以我正在启动一个本地客户端并给它一份要做的工作 list 。我的实际代码有点复杂,所以我在这里为您提供一个简单的示例:

from dask.distributed import Client

def inc(x):
 return x + 1

if __name__ == '__main__':
 c = Client()
 futures = [c.submit(inc, i) for i in range(1,10)]
 result = c.gather(futures)
 print(len(result))

问题是,我意识到:
1、Dask在这个例子中启动了9个以上的进程。
2.代码运行完成后(notebook中没有任何东西在运行),dask创建的进程没有被杀死(客户端没有关闭)。当我做一个顶部时,我可以看到所有这些过程还活着。

我在文档中看到有一个 client.close() 选项,但有趣的是,0.15.2 中不存在这样的功能。

dask 进程被杀死的唯一时间是当我停止 jupyter 笔记本时。此问题会导致奇怪且不可预测的性能行为。无论如何,当笔记本上没有运行代码时,进程是否会被杀死或客户端关闭?

最佳答案

默认的 Client 允许传递给 LocalCluster 的可选参数(参见 docs )并允许您指定,例如,您希望的进程数。此外,它是一个上下文管理器,它会在您完成后自行关闭并结束进程。

with Client(n_workers=2) as c:
    futures = [c.submit(inc, i) for i in range(1,10)]
    result = c.gather(futures)
    print(len(result))

当这结束时,进程将终止。

关于python-3.x - 通过 jupyter notebook 使用 dask 分布式计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46163097/

10-12 21:50
查看更多