#python #bokeh #tornado
#python #bokeh #торнадо
Вопрос:
Я пытаюсь создать сервер bokeh, который предоставляет одинаковое представление всем подключающимся пользователям. Я смог добиться этого, используя Bokeh в режиме библиотеки, используя следующий код:
from tornado.ioloop import IOLoop
from bokeh.server.server import Server
from bokeh.plotting import curdoc
io_loop = IOLoop.current()
server = Server(applications={'/myapp': self.make_document},
io_loop=io_loop,
allow_websocket_origin=['{0}.com:5001'.format(
hostname.lower()), 'localhost:5001'],
port=5001,
)
server.start()
server.show('/myapp')
io_loop.start()
Запускаю python main.py
, но я не могу получить доступ к статическому каталогу /myapp/static
.
Если я вместо этого сделаю:
self.make_document(curdoc())
И начать myapp
использовать bokeh server --show myapp
я могу получить доступ к статическому просто отлично, но при каждом подключении к новой вкладке браузера открывается новый вид.
Есть ли способ получить доступ к статическому каталогу в режиме библиотеки? Или способ предоставления одного и того же представления для всех подключений и по-прежнему использовать режим документа bokeh.
Ответ №1:
Найден ответ в примере встраивания торнадо в Боке
from tornado.web import StaticFileHandler
from tornado.ioloop import IOLoop
from bokeh.server.server import Server
from bokeh.plotting import curdoc
io_loop = IOLoop.current()
server = Server(applications={'/myapp': self.make_document},
io_loop=io_loop,
allow_websocket_origin=['{0}.com:5001'.format(
hostname.lower()), 'localhost:5001'],
port=5001,
extra_patterns=[
(r'/mydir/(.*)', StaticFileHandler, {'path':
os.path.normpath(os.path.dirname(__file__) '/mydir')})],
)
server.start()
server.show('/myapp')
io_loop.start()
Здесь mydir
он должен находиться в myapp
каталоге, а не в родительском.