簡體   English   中英

如何終止由 dask 多處理調度程序啟動的工作程序?

[英]How to terminate workers started by dask multiprocessing scheduler?

長時間使用dask多處理調度器后,發現多處理調度器啟動的python進程占用了大量內存。 如何重新啟動工作池?

更新:您可以這樣做來殺死由多處理調度程序啟動的工作程序:

from dask.context import _globals
pool = _globals.pop('pool')  # remove the pool from globals to make dask create a new one
pool.close()
pool.terminate()
pool.join()

第一個回答:

對於消耗大量內存的任務,我更喜歡在 localhost 中使用distributed調度程序。

這非常簡單:

  1. 在一個 shell 中啟動調度程序:
$ dask-scheduler
distributed.scheduler - INFO - -----------------------------------------------
distributed.scheduler - INFO -   Scheduler at:       1.2.3.4:8786
distributed.scheduler - INFO -        http at:       1.2.3.4:9786
distributed.bokeh.application - INFO - Web UI: http://1.2.3.4:8787/status/
distributed.scheduler - INFO - -----------------------------------------------
distributed.core - INFO - Connection from 1.2.3.4:56240 to Scheduler
distributed.core - INFO - Connection from 1.2.3.4:56241 to Scheduler
distributed.core - INFO - Connection from 1.2.3.4:56242 to Scheduler
  1. 在另一個shell中啟動worker,你可以相應地調整參數:
$ dask-worker  --nprocs 8 --nthreads 1 --memory-limit .8 1.2.3.4:8786
distributed.nanny - INFO -         Start Nanny at:            127.0.0.1:61760
distributed.nanny - INFO -         Start Nanny at:            127.0.0.1:61761
distributed.nanny - INFO -         Start Nanny at:            127.0.0.1:61762
distributed.nanny - INFO -         Start Nanny at:            127.0.0.1:61763
distributed.worker - INFO -       Start worker at:            127.0.0.1:61765
distributed.worker - INFO -              nanny at:            127.0.0.1:61760
distributed.worker - INFO -               http at:            127.0.0.1:61764
distributed.worker - INFO - Waiting to connect to:            127.0.0.1:8786
distributed.worker - INFO - -------------------------------------------------
distributed.worker - INFO -               Threads:                          1
distributed.nanny - INFO -         Start Nanny at:            127.0.0.1:61767
distributed.worker - INFO -                Memory:                    1.72 GB
distributed.worker - INFO -       Local Directory: /var/folders/55/nbg15c6j4k3cg06tjfhqypd40000gn/T/nanny-11ygswb9
...
  1. 最后使用distributed.Client類提交您的作業。
In [1]: from distributed import Client

In [2]: client = Client('1.2.3.4:8786')

In [3]: client
<Client: scheduler="127.0.0.1:61829" processes=8 cores=8>

In [4]: from distributed.diagnostics import progress

In [5]: import dask.bag

In [6]: data = dask.bag.range(10000, 8)

In [7]: data
dask.bag

In [8]: future = client.compute(data.sum())

In [9]: progress(future)
[########################################] | 100% Completed |  0.0s
In [10]: future.result()
49995000

我發現這種方式比默認調度程序更可靠。 我更喜歡明確提交任務並處理未來以使用進度小部件,這在筆記本中非常好。 此外,您仍然可以在等待結果的同時做一些事情。

如果由於內存問題而出現錯誤,您可以重新啟動工作程序或調度程序(重新開始),使用較小的數據塊並重試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM