我一直在阅读有关从工作人员上运行的任务中生成新进程的文档。我从这里遇到了这个:
但是,每个正在运行的任务都占用一个线程,因此如果您启动了许多启动其他任务的任务,那么如果您不小心,可能会导致系统死锁。您可以从任务中调用 secede 函数,以将其从专用线程池中移除到不占用 Dask worker 中的插槽的管理线程中
转移到管理线程是什么意思?是否所有插槽都具有相同的优先级或类似的东西?并且管理线程确实有优先权?
作为一个具体的例子,这是我想尝试的:
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)
wherecompute_square
和该lambda
函数可能会运行很多次,并且将是一个计算量更大的函数,值得提交作业的 1ms 开销。我应该secede
在这种情况下使用吗?