代码之家  ›  专栏  ›  技术社区  ›  julienl

从分布式dask中的线程池中分离任务

  •  1
  • julienl  · 技术社区  · 7 年前

    here :

    但是,每个正在运行的任务都占用一个线程,因此,如果您启动了许多启动其他任务的任务,那么如果您不小心,则可能会导致系统死锁。您可以在任务中调用sedede函数,将其自身从专用线程池中删除到不占用Dask工作线程内插槽的管理线程中

    转到管理线程意味着什么?所有插槽的优先级是否相同或类似?管理线程是否具有优先级?

    from dask.distributed import get_client, secede
    
    def compute_square(x):
        # Get locally created client
        client = get_client()
        secede()  # or not?
        if x > 5:
            client.submit(lambda x : x**2, x)
    

    哪里 compute_square lambda 我应该使用 secede 在这种情况下?

    1 回复  |  直到 7 年前
        1
  •  2
  •   MRocklin    7 年前

    转到管理线程意味着什么?

    Dask工作者为运行任务维护一个固定大小的线程池。当你打电话的时候 secede 您的计算将离开此线程池,并为其他任务打开另一个运行槽。任务的线程仍然存在,但只是一个普通线程。“管理线程”一词除了“不在线程池中的线程”之外,没有任何特别的含义。

    一旦任务运行,它们之间就没有优先级。它们都在没有优先级的普通Python线程中运行。

    管理线程是否具有优先级?

    在这种情况下我应该使用secede吗?

    你应该打电话 脱离 如果

    1. 您可能会调用足够多的任务,这些任务都在等待其他任务,因此没有任务可以完成,因为您的所有线程池的线程都在等待其他插槽打开。

    脱离 如果

    1. 脱离