【问题标题】:Is it possible to have default distributed Client per thread?每个线程是否可以有默认的分布式客户端?
【发布时间】:2022-08-06 12:23:14
【问题描述】:

我有 2 个独立的远程集群,并在包含 Dask DataFrame 操作的不同线程中运行几个并行任务。我不想在每个线程中明确使用客户端 - client.compute(df)。我想使用默认值 - df.compute()

是否可以为每个线程设置默认客户端?

    标签: python pandas dask distributed dask-dataframe


    【解决方案1】:

    这可能不是您正在寻找的解决方案,但一种选择是将相关计算包装在上下文管理器中:

    from distributed import Client, LocalCluster
    from dask.datasets import timeseries
    
    cluster1 = LocalCluster(n_workers=1, dashboard_address=':0')
    cluster2 = LocalCluster(n_workers=1, dashboard_address=':0')
    
    with Client(cluster1) as client:
        print(timeseries().head())
    
    with Client(cluster2) as client:
        print(timeseries().head())
    

    【讨论】:

    • 感谢您的解决方案,但据我了解,上下文管理器仅用于在块结束时关闭客户端。当您创建 Client(cluster) 时,它等于 Client(cluster, set_as_default=True)。这意味着它将在线程之间发生冲突。
    • 两个集群是在同一台机器上还是独立的机器上? (我不确定它最终是否重要,但可能是有用的信息)
    • 独立的远程集群。更多上下文:我正在使用 Prefect 并运行 2 个并行任务,这些任务将一些 Dask DataFrame 代码发送到集群。我想确保每个任务都使用默认客户端方法将代码发送到所需的集群。
    • 我已经在社区问过,但这个问题与分布式客户端更相关。
    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2018-09-06
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多