Python dask使用delayed构造函数列表,但指定要使用的进程数

Python dask使用delayed构造函数列表,但指定要使用的进程数,python,dask,Python,Dask,我有一个函数做计算,这里有一个简单的例子 def add(a,b): return a+b 然后我以一种尴尬的并行方式执行这个函数100次 output = [delayed(add)(i,i+1) for i in range(100)] compute(*output) 我的问题是上面的代码是否会启动100进程?如果是这样,有没有办法让它启动(比如10个进程)以减少启动进程的时间?默认调度程序启动线程池或进程池,其线程/进程数与您的计算机上的逻辑核数相同,尽管这是可配置的。Das

我有一个函数做计算,这里有一个简单的例子

def add(a,b):
    return a+b
然后我以一种尴尬的并行方式执行这个函数100次

output = [delayed(add)(i,i+1) for i in range(100)]
compute(*output)

我的问题是上面的代码是否会启动100进程?如果是这样,有没有办法让它启动(比如10个进程)以减少启动进程的时间?

默认调度程序启动线程池或进程池,其线程/进程数与您的计算机上的逻辑核数相同,尽管这是可配置的。Dask不会像您有任务那样启动那么多进程;正如你所说,这将是非常低效的

您可以在了解更多关于Dask调度程序的信息

dask delayed的默认get是一个线程池,其线程数与内核数相同

您可以使用不同的get而不是线程get,还可以通过compute指定get参数。要使用包含10个线程的线程池,可以执行dask.compute*output,num_workers=10。要将基于多处理模块的get与10个worker一起使用,可以执行dask.compute*output,get=dask.multiprocessing.get,num_workers=10。请注意,dask.multiprocessing所基于的多处理模块不是stdlib中最大的gem。Dask的使用可能很少,如果您以一种非常简单的方式使用它,那么它应该可以正常工作,但是如果我需要Dask基于进程的并行性,我会很快使用,即使是在单个主机上