首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个线程调度程序中,一个dask工作者使用多少个线程?

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

Stack Overflow用户
提问于 2018-11-07 15:37:25
回答 1查看 781关注 0票数 0

在使用dask运行测试用例时,我看到了400%+ CPU的使用情况,尽管我以多种方式指定了一个工作人员。在OSX中的活动监视器上,我看到两个进程,一个有一个线程,另一个有带有ThreadPool的8个线程。我看到两个进程,一个线程和4个线程与single-threaded。知道这些线程是干什么用的吗?

相关:What threads do Dask Workers have active?

代码语言:javascript
复制
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])

编辑:如果我注释掉了分析器和ThreadPool导入,在指定num_workers=1, scheduler='single-threaded'之后,我得到了一个带有4个线程的进程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-07 17:38:41

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

您可能可以使用环境变量(如OMP_NUM_THREADS=1 )来控制这一点。有更具体的环境变量取决于您的BLAS实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53192729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档