一个dask工作线程在一个线程调度程序中使用多少个线程?

2024-03-29 12:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

当使用dask运行一个测试用例时,我看到400%以上的CPU使用率,即使我以多种方式指定了1个worker。在OSX的活动监视器上,我看到两个进程,一个有1个线程,另一个有8个线程和线程池。我看到2个进程,1个线程和4个线程,single-threaded。你知道这些线是用来干什么的吗?在

相关:What threads do Dask Workers have active?

import dask
import dask.array as da
from dask.diagnostics import Profiler, ResourceProfiler, CacheProfiler, visualize
from multiprocessing.pool import ThreadPool

def main():
    a = da.random.random(size=(20000, 1000), chunks=(1000, 1000))
    q, r = da.linalg.qr(a)
    a2 = q.dot(r)
    out = a2.compute()


if __name__ == "__main__":
    with Profiler() as prof, ResourceProfiler(dt=0.25) as rprof:
        #with dask.config.set(pool=ThreadPool(1)):
        #with dask.config.set(num_workers=1):  # 1 worker, 400% usage
        #with dask.config.set(num_workers=1, scheduler='single-threaded'):  # 1 worker, 400% usage
        with dask.config.set(pool=ThreadPool(1)):  # 1 worker, 400% usage
            main()
    visualize([prof, rprof])

Edit:如果我注释掉profilers和ThreadPool导入,那么在指定num_workers=1, scheduler='single-threaded'之后,我得到了一个有4个线程的进程。在


Tags: importconfig进程mainaswith线程threaded
1条回答
网友
1楼 · 发布于 2024-03-29 12:19:30

Dask一次只运行一个任务,但这些任务可以在内部使用多个线程。在您的例子中,这可能是因为BLAS/LAPACK实现是多线程的。在

您可能可以使用OMP_NUM_THREADS=1之类的环境变量来控制这一点。根据您的BLAS实现,有更多特定的环境变量。在

相关问题 更多 >