繁体   English   中英

python bokeh 在服务器端或客户端运行

[英]python bokeh run in server side or client side

如果我的问题很愚蠢,我是一个新手很抱歉。 我正在尝试制作将接受客户端输入然后处理它然后在散景上提供它的网络应用程序。 这个过程非常繁重,所以我将使用高规格的 AWS 实例,我想知道的是,如果我将散景嵌入到我的烧瓶中,那么散景绘图过程将在客户端还是服务器端运行? 我知道有两个选项“嵌入”和“运行散景服务器”,现在我使用嵌入方法,我想知道使用散景服务器是否会使其更快

from bokeh.plotting import figure, output_file, show
from bokeh.models import LinearColorMapper, LogTicker, ColorBar
import numpy as np
import rasterio
import io

def read_DN(fname):
    inRaster = rasterio.open(fname)
    arr_DN = inRaster.read(1)
    arr_DN = arr_DN.astype('float32')
    arr_DN[arr_DN == 0] = 'nan'
    arr_DN_nan = np.isnan(arr_DN)
    return (arr_DN,arr_DN_nan)

def calculate_ndvi (fname4,fname5):
    arr_surf4,arr_DN4_nan = read_DN(fname4)
    arr_surf5,arr_DN4_nan = read_DN(fname5)

    ndvi = (arr_surf5 - arr_surf4) / (arr_surf5 + arr_surf4)

    return ndvi



def plottt(fname4,fname5,feature):
    ndvi = calculate_ndvi (fname4,fname5)
    ndvi = ndvi[3000:3500,3000:3500]
    ndvi = np.flipud(ndvi)
    if feature == 'lst' :
        plot = figure(x_range=(0,1), y_range=(0,1), toolbar_location="right")
        color_mapper =  LinearColorMapper(palette="Spectral11", low=-1, high=1, nan_color="white")
        plot.image(image=[ndvi], color_mapper=color_mapper,
                   dh=[1.0], dw=[1.0], x=[0], y=[0])

        color_bar = ColorBar(color_mapper=color_mapper,
                             label_standoff=12, border_line_color=None, location=(0,0))

        plot.add_layout(color_bar, 'right')
    elif feature == 'ndvi' :
        plot = figure(x_range=(0,1), y_range=(0,1), toolbar_location="right")
        color_mapper =  LinearColorMapper(palette="YlGn9", low=-1, high=1, nan_color="white")
        plot.image(image=[ndvi], color_mapper=color_mapper,
                   dh=[1.0], dw=[1.0], x=[0], y=[0])

        color_bar = ColorBar(color_mapper=color_mapper,
                             label_standoff=12, border_line_color=None, location=(0,0))

        plot.add_layout(color_bar, 'right')

    return plot
@app.route('/hasil')
def correlation_matrix():
    current_feature_name = request.args.get("feature_name")
    if current_feature_name == None:
        current_feature_name = "lst"

    for root, dirs, files in os.walk(app.config['UPLOAD_FOLDER']):
        for file in files:
            if file.endswith('B4.TIF'):
                fname4 = os.path.join(app.config['UPLOAD_FOLDER'], file)
            if file.endswith('B5.TIF'):
                fname5 = os.path.join(app.config['UPLOAD_FOLDER'], file)

    hasil = plottt(fname4,fname5,current_feature_name)
    script, div = components(hasil)

    return render_template("index1.html", script=script, div=div)

无论您使用嵌入服务器还是散景服务器,Python 代码都将在服务器上运行。

Bokeh 的架构是这样的:在 Python 中创建高级“模型对象”(表示绘图、范围、轴、字形等),然后转换为客户端库 BokehJS 使用的 JSON 格式. - https://docs.bokeh.org/en/latest/docs/user_guide/server.html#running-a-bokeh-server

换句话说,如果您小心地不让 embed 块在自己的进程上运行,那么它应该不会有太大的性能差异。 通常只使用具有多个进程的 WSGI 服务器(例如gunicorn)就足够了,假设您没有在 Flask 上运行任何其他繁重的工作。 如果客户端支持 WebGL(大多数浏览器都支持),那么可以使用output_backend="webgl"加速客户端渲染

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM