我已经使用dask建立了一个分布式系统。当我使用Python API启动调度程序时,敏捷调度程序没有提到启动仪表板。正如预期的那样,我无法在我希望的地址上到达它。
由于安装了bokeh,我希望仪表板能够启动。但是,当我使用命令行启动调度程序时,仪表板会正确启动。为什么通过python API启动调度程序不会启动仪表板?
相关信息:
输出调度程序(通过python API):
orval$ python3 myscheduler.py
distributed.scheduler - INFO - Clear task state
distributed.scheduler - INFO - Scheduler at: tcp://10.33.14.65:8786
代码myscheduler.py:
from distributed import Scheduler
from tornado.ioloop import IOLoop
from threading import Thread
s = Scheduler()
s.start('tcp://:8786') # Listen on TCP port 8786
loop = IOLoop.current()
loop.start()
通过命令行启动调度程序:
distributed.scheduler - INFO - -----------------------------------------------
distributed.scheduler - INFO - Clear task state
distributed.scheduler - INFO - Scheduler at: tcp://10.33.14.65:8786
distributed.scheduler - INFO - bokeh at: :8787
distributed.scheduler - INFO - Local Directory: /tmp/scheduler-pg2wz3cg
distributed.scheduler - INFO - -----------------------------------------------
答案 0 :(得分:1)
首先,即使在python进程中启动调度程序,您也可能希望考虑使用LocalCluster
:
cluster = dask.distributed.LocalCluster(processes=False, n_workers=0)
您可以通过cluster.scheduler
到达调度程序,并且cluster.scheduler.services
包含“散景”。
要直接实例化,您需要指定services=
关键字以包含Bokeh仪表板插件。要实例化的类是distributed.bokeh.scheduler.BokehScheduler
,类似
services={('bokeh', diagnostics_port): (BokehScheduler, {})}
是否要对已创建的循环和线程做一些特别的事情?在这种情况下,也许您可以更详细地说明要实现的目标。