当前位置: 首页 > news >正文

Superset二次开发之源码 run-server.sh 分析

背景:

如果基于docker方式部署Superset项目,Dockerfile文件末尾指向了docker-ci.sh,而docker-ci.sh 脚本又指向了run-server.sh。因此我们重点分析一下run-server脚本

路径 docker\run-server.sh

#!/usr/bin/env bashHYPHEN_SYMBOL='-'gunicorn \--bind "${SUPERSET_BIND_ADDRESS:-0.0.0.0}:${SUPERSET_PORT:-8088}" \--access-logfile "${ACCESS_LOG_FILE:-$HYPHEN_SYMBOL}" \--error-logfile "${ERROR_LOG_FILE:-$HYPHEN_SYMBOL}" \--workers ${SERVER_WORKER_AMOUNT:-1} \--worker-class ${SERVER_WORKER_CLASS:-gthread} \--threads ${SERVER_THREADS_AMOUNT:-20} \--timeout ${GUNICORN_TIMEOUT:-60} \--keep-alive ${GUNICORN_KEEPALIVE:-2} \--max-requests ${WORKER_MAX_REQUESTS:-0} \--max-requests-jitter ${WORKER_MAX_REQUESTS_JITTER:-0} \--limit-request-line ${SERVER_LIMIT_REQUEST_LINE:-0} \--limit-request-field_size ${SERVER_LIMIT_REQUEST_FIELD_SIZE:-0} \"${FLASK_APP}"

以上命令是用来启动一个 Gunicorn 服务器的脚本,Gunicorn 是一个 Python WSGI HTTP 服务器,常用于部署 Flask 和其他 WSGI 应用。以下是对这段命令的详细分析和解释:

各个参数的解释

`gunicorn` : 启动 Gunicorn 服务器的命令。

  • `--bind` : 指定服务器监听的地址和端口。`${SUPERSET_BIND_ADDRESS:-0.0.0.0}` 表示如果环境变量 `SUPERSET_BIND_ADDRESS` 未设置,则默认绑定到 `0.0.0.0`(即所有可用的网络接口)。`${SUPERSET_PORT:-8088}` 表示如果环境变量 `SUPERSET_PORT` 未设置,则默认使用端口 `8088`。
  • `--access-logfile` : 指定访问日志文件的路径。`${ACCESS_LOG_FILE:-$HYPHEN_SYMBOL}` 表示如果环境变量 `ACCESS_LOG_FILE` 未设置,则使用 `$HYPHEN_SYMBOL`(通常是 `-`,表示输出到标准输出)。
  • `--error-logfile` : 指定错误日志文件的路径。`${ERROR_LOG_FILE:-$HYPHEN_SYMBOL}` 表示如果环境变量 `ERROR_LOG_FILE` 未设置,则使用 `$HYPHEN_SYMBOL`。
  • `--workers` : 指定工作进程的数量。`${SERVER_WORKER_AMOUNT:-1}` 表示如果环境变量 `SERVER_WORKER_AMOUNT` 未设置,则默认使用 `1` 个工作进程。增加工作进程可以提高并发处理能力。
  • `--worker-class` : 指定工作进程的类型。`${SERVER_WORKER_CLASS:-gthread}` 表示如果环境变量 `SERVER_WORKER_CLASS` 未设置,则默认使用 `gthread`(基于线程的工作进程)。可以根据需要选择不同的工作类,如 `sync`、`eventlet`、`gevent` 等。
  • `--threads` : 指定每个工作进程的线程数。`${SERVER_THREADS_AMOUNT:-20}` 表示如果环境变量 `SERVER_THREADS_AMOUNT` 未设置,则默认使用 `20` 个线程。适用于处理 I/O 密集型任务。
  • `--timeout` : 指定请求超时时间(秒)。`${GUNICORN_TIMEOUT:-60}` 表示如果环境变量 `GUNICORN_TIMEOUT` 未设置,则默认超时为 `60` 秒。
  • `--keep-alive` : 指定保持连接的时间(秒)。`${GUNICORN_KEEPALIVE:-2}` 表示如果环境变量 `GUNICORN_KEEPALIVE` 未设置,则默认保持连接 `2` 秒。
  • `--max-requests` : 指定每个工作进程在重启之前处理的最大请求数。`${WORKER_MAX_REQUESTS:-0}` 表示如果环境变量 `WORKER_MAX_REQUESTS` 未设置,则默认值为 `0`(表示不限制)。
  • `--max-requests-jitter` : 指定在重启工作进程时的随机延迟(秒)。`${WORKER_MAX_REQUESTS_JITTER:-0}` 表示如果环境变量 `WORKER_MAX_REQUESTS_JITTER` 未设置,则默认值为 `0`。
  • `--limit-request-line` : 指定请求行的最大字节数。`${SERVER_LIMIT_REQUEST_LINE:-0}` 表示如果环境变量 `SERVER_LIMIT_REQUEST_LINE` 未设置,则默认值为 `0`(表示不限制)。
  • `--limit-request-field_size` : 指定请求头字段的最大字节数。`${SERVER_LIMIT_REQUEST_FIELD_SIZE:-0}` 表示如果环境变量 `SERVER_LIMIT_REQUEST_FIELD_SIZE` 未设置,则默认值为 `0`(表示不限制)。
  • `${FLASK_APP}` : 指定要运行的 Flask 应用程序的模块或包名。这个变量通常在环境中设置,指向 Flask 应用的入口。

   总结

这段命令通过 Gunicorn 启动一个 Flask 应用,配置了多种参数以优化性能和日志记录。通过使用环境变量,用户可以灵活地调整服务器的行为,适应不同的部署需求。整体上,这段命令为 Superset 提供了一个可扩展和高效的运行环境。

相关文章:

Superset二次开发之源码 run-server.sh 分析

背景: 如果基于docker方式部署Superset项目,Dockerfile文件末尾指向了docker-ci.sh,而docker-ci.sh 脚本又指向了run-server.sh。因此我们重点分析一下run-server脚本 路径 docker\run-server.sh #!/usr/bin/env bashHYPHEN_SYMBOL-gunicorn…...

Java 之四种内部类详解

在 Java 中,除了传统的类定义方式之外,还有一种特殊的类定义方式——内部类。内部类定义在另一个类的内部,可以访问外部类的成员,这使得代码更加灵活和可读性更强。本文将详细讲解 Java 中四种内部类的类型:成员内部类…...

03:手动可变电阻

可变电阻 1、电位器2、变阻器/数字电位器2.1:变阻器2.2:数字电位器 3、电位器锥度4、寄生电感/电容 1、电位器 如上图所示:将可变的电阻作为分压器,那么这种可变的电阻就是电位器。例如:将L1连接负极,L3连接…...

嵌入式Linux电池管理(TODO)

(TODO) 在树莓派3B上使用电池供电需要考虑多个方面,包括电源管理、硬件连接和软件配置。以下是详细的步骤和建议: 1. 选择合适的电池 树莓派3B需要5V的电源供电,通常电流需求在2.5A左右。常见的电池选择包括&#xff1…...

Python 求亲和数

亲和数(Amicable Numbers)是指两个不同的正整数,它们的真因数(即除去本身的所有因数)之和与对方的数相等。 def sum_of_proper_divisors(n):"""计算一个数的真因子之和"""divisors_su…...

【C++】——vector模拟实现和迭代器失效问题

文章目录 模拟实现vector基本成员变量vector的构造与析构vector迭代器vector容量vector元素访问vector修改操作 vector迭代器失效问题什么是迭代器失效1.插入元素导致迭代器失效2.删除元素导致迭代器失效3.重新分配空间导致迭代器失效 如何解决迭代器失效问题 模拟实现 vector…...

USB 3.1 标准 A 型连接器及其引脚分配

USB 3.1 标准 A 型连接器 USB 3.1 标准 A 型连接器被定义为主机连接器。它具有与 USB 2.0 标准 A 型连接器相同的配合接口,但增加了另外两对差分信号和一个接地引脚。 USB 3.1 标准 A 型插座可以接受 USB 3.1 标准 A 型插头或 USB 2.0 标准 A 型插头。类似地&…...

机器学习文献|基于循环细胞因子特征,通过机器学习算法预测NSCLC免疫治疗结局

今天我们一起学习一篇最近发表在Journal for immunotherapy of cancer (IF 10.9)上的文章,Machine learning for prediction of immunotherapeutic outcome in non-small-cell lung cancer based on circulating cytokine signatures[基于循环…...

Qt 实现自定义截图工具

目录 Qt 实现自定义截图工具实现效果图PrintScreen 类介绍PrintScreen 类的主要特性 逐步实现第一步:类定义第二步:初始化截图窗口第三步:处理鼠标事件第四步:计算截图区域第五步:捕获和保存图像 完整代码PrintScreen.…...

第15-05章:获取运行时类的完整结构

我的后端学习大纲 我的Java学习大纲 6.1.第一组方法API: 1.API列表:java.lang.Class 类: 2.代码测试: public class ReflectionUtils{ puvblic static void main(String[] args){}// 第一组Testpublic void api_01{//上面截图的代码......…...

【Kubernetes】K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制

K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制 1.基于属性的访问控制(ABAC 鉴权)2.基于节点的访问控制(node 鉴权)2.1 读取操作2.2 写入操作 3.基于 Webhook 的访问控制3.1 基于 We…...

Java面试、技巧、问题、回复,资源面面观

入门 先了解一下面试流程 复习 Java 基础知识: 温习 Java 编程的核心概念,包括数据类型、变量、循环、数组和面向对象的编程原则。数据结构和算法: 加强您对 Java 编程中使用的基本数据结构和算法的理解。练习编码: 在各种平台上解…...

深入理解Elasticsearch的`_source`字段与索引优化

在Elasticsearch (ES) 中,_source字段是一个关键组件,它不仅决定了数据的存储方式,还影响到查询时返回的内容。在某些场景下,我们可以通过配置_source来优化存储和性能,尤其是当我们希望减少存储空间或避免返回某些字段…...

Pikachu靶场

先来点鸡汤,少就是多,慢就是快。 环境搭建 攻击机kali 192.168.146.140 靶机win7 192.168.146.161 下载zip,pikachu - GitCode 把下载好的pikachu-master,拖进win7,用phpstudy打开网站根目录,.....再用…...

TS axios封装

方式一 service/request/request.ts import axios from axios import { ElLoading } from element-plus import type { AxiosRequestConfig, AxiosInstance, AxiosResponse } from axios import type { ILoadingInstance } from element-plus/lib/el-loading/src/loading.typ…...

学会使用西门子博途Startdrive中的测量功能

工程师在驱动调试过程中,往往需要对驱动系统的性能进行分析及优化,比如说借助于调试软件中的驱动器测量功能,可以得到驱动系统的阶跃响应、波特图等,以此为依据工程师可以调整速度控制器、电流控制器的相关参数,使驱动…...

Spring Security认证与授权

1 Spring Security介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是Spring生态系统中的一员,因此它伴随着整个Spring生态系统不断修正、升级,在spring boot项目中加入springsecurity更是…...

速通GPT:Improving Language Understanding by Generative Pre-Training全文解读

文章目录 速通GPT系列几个重要概念1、微调的具体做法2、任务感知输入变换3、判别式训练模型 Abstract概括分析和观点1. 自然语言理解中的数据问题2. 生成预训练和监督微调的结合3. 任务感知输入变换4. 模型的强大性能 Introduction概括分析和观点1. 自然语言理解的挑战在于对标…...

软件质量保证例题

答案:D 软件质量保证 功能性 适合性 准确性 互操作性 安全保密性 依从性 可靠性 成熟性 容错性 易恢复性 易用性 易理解性 易学性 易操作性 效率 时间特性 资源利用性 维护性 易分析性 易改变性 稳定性 易测试性 可移植性 适应性 易安装性 一致性 易替换…...

动态规划算法---04.斐波那契数列模型_解码方法_C++

题目链接:91. 解码方法 - 力扣(LeetCode)https://leetcode.cn/problems/decode-ways/description/ 一、题目解析 题目: 题目大意:从题目中我们可以知道,解码就是在字符串s中由‘1’到‘26’的字符可以转化…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...