【问题标题】:Dask Distributed Getting Futures after Client Closed客户关闭后 Dask 分布式获取期货
【发布时间】:2018-03-14 17:46:06
【问题描述】:

当客户端关闭时,有没有办法防止 dask/distributed 取消排队和执行期货?

我想使用 jupyter notebook 来启动一些非常长时间运行的分布式模拟,关闭 notebook,稍后再检索结果。

【问题讨论】:

    标签: python dask dask-distributed


    【解决方案1】:

    您可以使用“发布”机制在调度程序中保留对某些数据的引用,以便稍后在另一个客户端中检索。存在两种形式,它们用不同的语法做同样的事情:

    >>> client.publish_dataset(mydata=f)
    

    这里f 是一个future、future 列表或dask 集合(数据框等)。

    在另一个会话中:

    >>> client.list_datasets()
    ['mydata']
    >>> client.get_dataset('mydata')
    <same thing as f>
    

    另一种可能更简单的语法看起来像

    >>> client.datasets['mydata'] = f
    
    >>> list(client.datasets)
    ['mydata']
    >>> client.datasets['mydata']
    <same thing as f>
    

    要删除引用并允许从集群中清除数据(如果没有客户端需要它们),请使用 client.unpublish_dataset('mydata')del client.datasets['mydata']

    【讨论】:

    • 您好,mdurant,感谢您的回复。我确实尝试过这个方法,但是发现即使是发布的数据集,如果调用了client.close,即使已经发布了future仍然会被取消。
    • 我错了!原来的未来(由 client.submit 返回)确实被取消了,但似乎 client.get_dataset 返回了一个 不同的 未来,随着操作的继续,它仍然处于挂起状态。感谢您提出这个建议,它迫使我重新考虑我的假设;我很可能会放弃 dask/distributed,转而使用 celery 作为我的应用程序。
    • 很高兴你不需要放弃 dask!
    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多