【问题标题】:using dask distributed computing via jupyter notebook通过 jupyter notebook 使用 dask 分布式计算
【发布时间】:2017-09-11 19:27:40
【问题描述】:

在 jupyter notebook 中使用 dask 时,我看到了奇怪的行为。所以我正在启动一个本地客户,并给它一份工作清单。我的真实代码有点复杂,所以我在这里为你举一个简单的例子:

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 notebook 的时候。此问题导致奇怪且不可预测的性能行为。当笔记本上没有代码运行时,进程是否会被杀死或客户端关闭?

【问题讨论】:

    标签: python-3.x dask dask-distributed


    【解决方案1】:

    默认的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))
    

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

    【讨论】:

    • 非常感谢您的帮助。您的建议有所帮助,我能够控制进程的数量,但这些进程仍然存在并且没有被杀死。我需要更改上下文管理器的设置吗?
    • 所以我得到了你的帮助。再次感谢你。我只需要一个小改动:cluster = LocalCluster(n_workers=9) with Client(cluster) as c:
    • 好的,可以 - 你会用你的最终代码编辑回复吗?
    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2020-01-31
    • 2017-01-18
    • 2020-08-19
    相关资源
    最近更新 更多