2017-07-27 40 views
1

我一直在阅读有关在worker上运行的任务生成新进程的文档。我碰到这个从here在dask分发线程池中的任务

然而,每个正在运行的任务占用了一个单独的线程,所以如果你启动启动其他任务很多任务则是可能的,如果你不小心死锁系统。您可以拨打分裂出去的功能在任务中,我们将会从专门的线程池删除本身到不与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_squarelambda功能可能运行了好几次,而且将是一个更为计算密集的功能价值提交作业的1ms开销。 在这种情况下,我应该使用secede吗?

回答

1

移动到管理线程是什么意思?

Dask工作人员为运行任务维护一个固定大小的线程池。当您拨打secede时,您的计算将离开此线程池并打开另一个插槽,以便运行其他任务。你的任务的线程仍然存在,但只是一个普通的线程。除了“线程不在线程池中”之外,术语“管理线程”并不意味着任何特别的含义。

是否所有插槽都具有相同的优先级或类似的优先级?

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

而管理线程确实有优先权吗?

没有

我应该使用在这种情况下分离出去?

你应该叫secede如果

  1. 还有就是你会调用足够的任务,这都在等待其他任务,以便没有任务可以完成,因为所有的线程池的线程都在等待一个可能性为其他插槽打开。
  2. 你不打算做更多的工作,这项工作

你不应该叫secede如果

  1. 你打算调用secede后做更多的计算限制的工作的任务。这仍然可以,但有点不礼貌,因为Dask可以毫无困难地推出其中几项任务。