gpt4 book ai didi

python - dask 的本地调度程序和 gevent

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:59 24 4
gpt4 key购买 nike

我正在使用 distributed.Client 进行一些本地计算。我还想从主线程生成一个 gevent greenlet 来执行一些不相关的监视。使用 gevent 的 patch_all() 方法,会将 native 线程转换为 greenlet。鉴于调度程序完成的大部分工作都是 pandas/numpy,因此我怀疑其中大部分会释放 GIL,因此 native 线程会很有用。我担心用 gevent 修补它们将完全不是最佳的。然而,不修补 native 线程给我带来了其他麻烦(具体来说,当本地调度程序尝试 fork Bokeh 服务器时抛出错误。这是一个已知的限制)。使用 gevent 和 dask/distributed 时是否有建议的最佳实践,或者应该避免使用?

最佳答案

Dask.distributed 使用 Tornado 实现并发,而计算则在其他线程中进行。计算和通信在同一进程中重叠。如果您停止使用正确的线程,那么通信将阻塞,直到长时间运行的计算完成。这可能会导致您的工作人员变得无响应,因为他们必须等待长时间运行的计算才能处理与其他工作人员的通信请求。事实上,numpy/pandas 计算释放 GIL 仅在您实际使用线程时才有帮助。

如果 fork Bokeh 服务器是一个问题,您也可以选择不使用带有 --no-bokeh 标志的 Bokeh Web 服务器。

dask-scheduler --no-bokeh

或者,简而言之,dask.distributed 没有使用 gevent 进行测试,并且没有计划支持它。

关于python - dask 的本地调度程序和 gevent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42500638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com