【问题标题】:Dask multiple clientsDask 多个客户
【发布时间】:2020-05-31 02:10:09
【问题描述】:

是否可以同时拥有多个客户?例如,我可以让多个线程与每个线程一个客户端一起运行,这样当一个线程阻塞时,其他线程可以继续吗?在这种情况下,每个客户端都会有独立的任务图,它们不相互依赖。

作为后续问题,如果这是可能的,那么我如何指定在哪里运行特定任务?当我执行 dd.read_csv,然后调用计算时,我如何知道哪个客户端及其关联的调度程序/工作人员正在执行此操作?

【问题讨论】:

    标签: dask dask-distributed dask-delayed dask-dataframe


    【解决方案1】:

    dask 是否可以有多个客户端

    是的,这是可能的,例如,您可以在一个集群上运行计算,同时在另一个集群上运行其他计算

    我可以让多个线程在每个线程中运行一个客户端

    运行你工作的不是客户,而是工人,所以我不确定你在问什么。

    当一个线程阻塞时,其他线程可以继续

    客户端很大程度上是异步的,几乎没有什么操作应该阻塞,调用它们时由你决定。

    当调用计算时,我如何知道哪个客户端及其关联的调度程序/工作人员正在执行此操作

    thing.compute() 将使用默认客户端,这将是最近创建的客户端。函数dask.distributed.get_client() 会为您获取正确的。

    要选择使用哪个,您可以使用以下任何一种:

    fut = client.compute(thing) 
    fut.result() or client.gather(fut)
    
    with client:
        thing.compute()
    

    【讨论】:

    • 谢谢这回答了我的问题。澄清一下,我并不是说阻止来自客户。我正在运行带有线程池的 REST 服务器,线程可能会阻塞磁盘访问/只是在任务上花费大量时间。
    • 嗨,很抱歉重新打开这个,我现在遇到了另一个问题。由于我有多个客户端在运行,同时使用 client.compute 和 client.gather 来指定在哪个客户端上运行任务,一些没有指定客户端的任务(例如 dd.read_parquet)默认为 Dask 的默认客户端,即是最近实例化的一个。当我尝试指定另一个客户端进行额外处理时,这给了我一个错误......有没有办法解决这个问题?谢谢!
    • 如果你可以制作一个小型复制器,在错误的客户端上计算某些东西,你应该把它变成分布式 repo 的 gihub 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多