Skywalking-9.6.0系列之本地源码编译并启动
Skywalking相信有很多人使用过,通过容器或者下载安装包进行安装的,今天从源代码角度,拉取、构建、启动。
官方文档步骤简洁明了,我这边会结合自己遇到的一些问题做出总结。
当前构建资源版本:
- MAC 10.15.7
- IDEA 2021.2
- node v16.14.0 (据代码要求安装了一个新版本)
- npm 8.3.1
- Skywalking 9.6.0-SNAPSHOT
- JDK 11 (最新的代码要看最新的要求,注意不能使用JDK8,用错的话构建时也会有提示)
- Maven 3.6.0
官方指南(必看):https://github.com/apache/skywalking/blob/master/docs/en/guides/How-to-build.md
快速阅览
- 流程1:源码获取
- 流程2:submodule模块初始化
- 或者流程1&2:二合一
- 流程3:构建项目
- 流程4:构建产生的源代码数据加入项目索引
- 流程5:启动前后端代码
流程1:源码获取
方法一:fork代码后,在自己的仓库下 git clone源代码
方法二:下载源码包后解压
【下载失败,网络问题,只能自行解决】
流程2:submodule模块初始化
.gitsubmodules文件
[submodule "apm-protocol/apm-network/src/main/proto"]path = apm-protocol/apm-network/src/main/protourl = https://github.com/apache/skywalking-data-collect-protocol.git
[submodule "oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol"]path = oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocolurl = https://github.com/apache/skywalking-query-protocol.git
[submodule "test/e2e-v2/java-test-service/e2e-protocol/src/main/proto"]path = test/e2e-v2/java-test-service/e2e-protocol/src/main/protourl = https://github.com/apache/skywalking-data-collect-protocol.git
[submodule "skywalking-ui"]path = skywalking-uiurl = https://github.com/apache/skywalking-booster-ui.git
以上可以看出关联的仓库数据主要有:
- https://github.com/apache/skywalking-data-collect-protocol.git
- https://github.com/apache/skywalking-query-protocol.git
- https://github.com/apache/skywalking-data-collect-protocol.git
- https://github.com/apache/skywalking-booster-ui.git
执行以下命令,来获取这些代码数据:
git submodule init //初始化仓库目录位置
git submodule update //**这步骤至关重要**
这个环节由于涉及四个仓库的代码拉取,此时如果网络状况不佳,很有可能存在【空文件夹】的情况,所以可以这样解决:
方法一:保障网络稳定,删除拉取的空文件夹,再重新git submodule init
AND git submodule update
,重复尝试直至拉取成功
关注这些项目文件夹:
- apm-protocol/apm-network/src/main/proto
- oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
- test/e2e-v2/java-test-service/e2e-protocol/src/main/proto
- skywalking-ui
方法二: 去除.gitsubmodules文件中的内容,按照需求取拉取对应的代码,参照【gitsubmodules】文件目录要求放到指定的文件夹内
以上,可能存在的问题主要就是网络方面,如果以上项目目录未拉全就去执行下一步构建,会产生很多报错,这步必须确认好
或者流程1&2:二合一
git clone --recurse-submodules https://github.com/apache/skywalking.git
也就是clone代码,并且把submodules一起拉下来
流程3:构建项目
前提确认一下JDK 11+ & Maven 3.6+ 的环境,最好提前安装node要求的版本
项目根目录下执行./mvnw clean package -Dmaven.test.skip
,构建项目较多,可能需要几分钟时间
这个步骤遇到比较多的问题,基本都是卡在node版本的下载和npm依赖包的拉取上,最终skywalking-ui的项目始终build不成功
-
node版本的下载,本地有8和18的版本,当前构建需要16的版本,下载网速出了问题
当前用到的v16.14.0,还可以确认一下node和npm的版本映射关系(https://nodejs.org/zh-cn/download/releases),我当前在npm8.3.1,是可以兼容
-
npm install拉取依赖包也存在网速问题,可以替换镜像源
skywalking/apm-webapp/pom.xml 中,找到
<arguments>install --registry=https://registry.npmjs.org/</arguments><!--修改为淘宝镜像--><arguments>install --registry=https://registry.npm.taobao.org/</arguments>
-
【qiang】的问题,以为会变快,其实反作用
-
整体流程构建如果最终都是卡在skywalking-ui前端项目的构建上,可以单独使用对应的node版本去这个项目下单独
npm install
&npm run build
确认下,避免要重头再来,时间比较长
最终:
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for apm 9.6.0-SNAPSHOT:
[INFO]
[INFO] apm ................................................ SUCCESS [ 5.195 s]
[INFO] oap-protocol ....................................... SUCCESS [ 0.335 s]
[INFO] apm-network ........................................ SUCCESS [ 28.284 s]
[INFO] oap-server ......................................... SUCCESS [ 0.446 s]
[INFO] server-library ..................................... SUCCESS [ 0.280 s]
[INFO] library-util ....................................... SUCCESS [ 4.413 s]
[INFO] library-module ..................................... SUCCESS [ 1.693 s]
[INFO] server-telemetry ................................... SUCCESS [ 0.187 s]
[INFO] telemetry-api ...................................... SUCCESS [ 1.580 s]
[INFO] server-testing ..................................... SUCCESS [ 1.385 s]
[INFO] server-configuration ............................... SUCCESS [ 0.372 s]
[INFO] configuration-api .................................. SUCCESS [ 1.714 s]
[INFO] library-elasticsearch-client ....................... SUCCESS [ 7.733 s]
[INFO] library-client ..................................... SUCCESS [ 2.882 s]
[INFO] library-server ..................................... SUCCESS [ 1.853 s]
[INFO] library-datacarrier-queue .......................... SUCCESS [ 0.902 s]
[INFO] ai-pipeline ........................................ SUCCESS [ 2.719 s]
[INFO] server-core ........................................ SUCCESS [ 27.428 s]
[INFO] library-kubernetes-support ......................... SUCCESS [ 1.696 s]
[INFO] analyzer ........................................... SUCCESS [ 0.509 s]
[INFO] meter-analyzer ..................................... SUCCESS [ 4.938 s]
[INFO] agent-analyzer ..................................... SUCCESS [ 4.672 s]
[INFO] log-analyzer ....................................... SUCCESS [ 3.668 s]
[INFO] event-analyzer ..................................... SUCCESS [ 1.611 s]
[INFO] server-receiver-plugin ............................. SUCCESS [ 0.982 s]
[INFO] skywalking-sharing-server-plugin ................... SUCCESS [ 1.546 s]
[INFO] skywalking-trace-receiver-plugin ................... SUCCESS [ 2.440 s]
[INFO] zipkin-receiver-plugin ............................. SUCCESS [ 1.786 s]
[INFO] skywalking-mesh-receiver-plugin .................... SUCCESS [ 1.946 s]
[INFO] skywalking-management-receiver-plugin .............. SUCCESS [ 1.607 s]
[INFO] skywalking-jvm-receiver-plugin ..................... SUCCESS [ 1.963 s]
[INFO] receiver-proto ..................................... SUCCESS [ 17.060 s]
[INFO] envoy-metrics-receiver-plugin ...................... SUCCESS [ 3.926 s]
[INFO] skywalking-clr-receiver-plugin ..................... SUCCESS [ 1.542 s]
[INFO] skywalking-profile-receiver-plugin ................. SUCCESS [ 1.549 s]
[INFO] otel-receiver-plugin ............................... SUCCESS [ 2.132 s]
[INFO] skywalking-meter-receiver-plugin ................... SUCCESS [ 1.976 s]
[INFO] skywalking-browser-receiver-plugin ................. SUCCESS [ 2.540 s]
[INFO] skywalking-log-receiver-plugin ..................... SUCCESS [ 2.236 s]
[INFO] configuration-discovery-receiver-plugin ............ SUCCESS [ 2.265 s]
[INFO] skywalking-event-receiver-plugin ................... SUCCESS [ 2.095 s]
[INFO] skywalking-zabbix-receiver-plugin .................. SUCCESS [ 3.999 s]
[INFO] skywalking-ebpf-receiver-plugin .................... SUCCESS [ 2.799 s]
[INFO] skywalking-telegraf-receiver-plugin ................ SUCCESS [ 2.467 s]
[INFO] aws-firehose-receiver .............................. SUCCESS [ 7.095 s]
[INFO] server-cluster-plugin .............................. SUCCESS [ 0.148 s]
[INFO] cluster-zookeeper-plugin ........................... SUCCESS [ 1.676 s]
[INFO] cluster-standalone-plugin .......................... SUCCESS [ 1.344 s]
[INFO] cluster-kubernetes-plugin .......................... SUCCESS [ 1.972 s]
[INFO] cluster-consul-plugin .............................. SUCCESS [ 1.811 s]
[INFO] cluster-etcd-plugin ................................ SUCCESS [ 1.955 s]
[INFO] cluster-nacos-plugin ............................... SUCCESS [ 1.982 s]
[INFO] server-storage-plugin .............................. SUCCESS [ 0.120 s]
[INFO] storage-jdbc-hikaricp-plugin ....................... SUCCESS [ 5.366 s]
[INFO] storage-elasticsearch-plugin ....................... SUCCESS [ 4.129 s]
[INFO] storage-banyandb-plugin ............................ SUCCESS [ 4.208 s]
[INFO] oal-grammar ........................................ SUCCESS [ 1.128 s]
[INFO] oal-rt ............................................. SUCCESS [ 2.740 s]
[INFO] server-query-plugin ................................ SUCCESS [ 0.134 s]
[INFO] zipkin-query-plugin ................................ SUCCESS [ 2.032 s]
[INFO] server-fetcher-plugin .............................. SUCCESS [ 0.111 s]
[INFO] kafka-fetcher-plugin ............................... SUCCESS [ 3.037 s]
[INFO] server-health-checker .............................. SUCCESS [ 1.661 s]
[INFO] mqe-grammar ........................................ SUCCESS [ 0.735 s]
[INFO] mqe-rt ............................................. SUCCESS [ 2.202 s]
[INFO] query-graphql-plugin ............................... SUCCESS [ 3.807 s]
[INFO] promql-plugin ...................................... SUCCESS [ 3.402 s]
[INFO] logql-plugin ....................................... SUCCESS [ 1.966 s]
[INFO] server-alarm-plugin ................................ SUCCESS [ 5.635 s]
[INFO] telemetry-prometheus ............................... SUCCESS [ 1.485 s]
[INFO] exporter ........................................... SUCCESS [ 3.927 s]
[INFO] grpc-configuration-sync ............................ SUCCESS [ 2.922 s]
[INFO] configuration-apollo ............................... SUCCESS [ 1.624 s]
[INFO] configuration-zookeeper ............................ SUCCESS [ 1.661 s]
[INFO] configuration-etcd ................................. SUCCESS [ 1.129 s]
[INFO] configuration-consul ............................... SUCCESS [ 1.498 s]
[INFO] configuration-k8s-configmap ........................ SUCCESS [ 1.837 s]
[INFO] configuration-nacos ................................ SUCCESS [ 1.452 s]
[INFO] server-starter ..................................... SUCCESS [ 7.200 s]
[INFO] server-tools ....................................... SUCCESS [ 0.096 s]
[INFO] profile-exporter ................................... SUCCESS [ 0.091 s]
[INFO] tool-profile-snapshot-server-mock .................. SUCCESS [ 1.363 s]
[INFO] tool-profile-snapshot-bootstrap .................... SUCCESS [ 2.893 s]
[INFO] tool-profile-snapshot-exporter ..................... SUCCESS [ 3.118 s]
[INFO] data-generator ..................................... SUCCESS [ 4.334 s]
[INFO] microbench ......................................... SUCCESS [ 8.785 s]
[INFO] oap-server-bom ..................................... SUCCESS [ 0.059 s]
[INFO] apm-webapp ......................................... SUCCESS [03:32 min]
[INFO] apache-skywalking-apm .............................. SUCCESS [ 37.877 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 08:42 min
[INFO] Finished at: 2023-08-09T18:59:37+08:00
[INFO] ------------------------------------------------------------------------
流程4:构建产生的源代码数据加入项目索引
IDEA中,可以找到对应的目录,右键 “Mark Dictory as” -> “Generated Sources Root”,将构建产生的数据加入编辑器的索引中
- apm-protocol/apm-network/target/generated-sources/protobuf
- oap-server/server-core/target/generated-sources/protobuf
- oap-server/server-receiver-plugin/receiver-proto/target/generated-sources/fbs
- oap-server/server-receiver-plugin/receiver-proto/target/generated-sources/protobuf
- oap-server/exporter/target/generated-sources/protobuf
- oap-server/server-configuration/grpc-configuration-sync/target/generated-sources/protobuf
- oap-server/server-alarm-plugin/target/generated-sources/protobuf
- oap-server/oal-grammar/target/generated-sources
流程5:启动前后端代码
1.启动OAP核心服务,接收数据上报与数据查询
- /skywalking/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/OAPServerStartUp.java
- 后端项目启动,存储的数据默认是H2,也可以自己根据标准版本部署对应的elastcisearch版本进行配置
- 由于整体是插件化的架构风格,在组件的选择上使用
selector
即可快速锁定选择的组件。默认存储是h2,修改为es的只要selector: ${SW_STORAGE:elasticsearch}
并修改下方elasticsearch对应的配置即可
storage:selector: ${SW_STORAGE:h2} #--> 修改elasticsearch:namespace: ${SW_NAMESPACE:""}clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000}socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000}numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0}user: ${SW_ES_USER:""}password: ${SW_ES_PASSWORD:""}trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool.dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexesindexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1} # Replicas number of new indexes# Specify the settings for each index individually.# If configured, this setting has the highest priority and overrides the generic settings.specificIndexSettings: ${SW_STORAGE_ES_SPECIFIC_INDEX_SETTINGS:""}# Super data set has been defined in the codes, such as trace segments.The following 3 config would be improve es performance when storage super size data in es.superDatasetDayStep: ${SW_STORAGE_ES_SUPER_DATASET_DAY_STEP:-1} # Represent the number of days in the super size dataset record index, the default value is the same as dayStep when the value is less than 0superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5} # This factor provides more shards for the super data set, shards number = indexShardsNumber * superDatasetIndexShardsFactor. Also, this factor effects Zipkin traces.superDatasetIndexReplicasNumber: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_REPLICAS_NUMBER:0} # Represent the replicas number in the super size dataset record index, the default value is 0.indexTemplateOrder: ${SW_STORAGE_ES_INDEX_TEMPLATE_ORDER:0} # the order of index templatebulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:5000} # Execute the async bulk record data every ${SW_STORAGE_ES_BULK_ACTIONS} requestsbatchOfBytes: ${SW_STORAGE_ES_BATCH_OF_BYTES:10485760} # A threshold to control the max body size of ElasticSearch Bulk flush.# flush the bulk every 5 seconds whatever the number of requestsflushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:5}concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requestsresultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:10000}scrollingBatchSize: ${SW_STORAGE_ES_SCROLLING_BATCH_SIZE:5000}segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}profileDataQueryBatchSize: ${SW_STORAGE_ES_QUERY_PROFILE_DATA_BATCH_SIZE:100}oapAnalyzer: ${SW_STORAGE_ES_OAP_ANALYZER:"{\"analyzer\":{\"oap_analyzer\":{\"type\":\"stop\"}}}"} # the oap analyzer.oapLogAnalyzer: ${SW_STORAGE_ES_OAP_LOG_ANALYZER:"{\"analyzer\":{\"oap_log_analyzer\":{\"type\":\"standard\"}}}"} # the oap log analyzer. It could be customized by the ES analyzer configuration to support more language log formats, such as Chinese log, Japanese log and etc.advanced: ${SW_STORAGE_ES_ADVANCED:""}# Enable shard metrics and records indices into multi-physical indices, one index template per metric/meter aggregation function or record.logicSharding: ${SW_STORAGE_ES_LOGIC_SHARDING:false}# Custom routing can reduce the impact of searches. Instead of having to fan out a search request to all the shards in an index, the request can be sent to just the shard that matches the specific routing value (or values).enableCustomRouting: ${SW_STORAGE_ES_ENABLE_CUSTOM_ROUTING:false}h2:properties:jdbcUrl: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=FALSE}dataSource.user: ${SW_STORAGE_H2_USER:sa}metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:100}asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:1}
- 启动后端服务跑在 127.0.0.1:11800
2.启动web页面项目,供页面操作
- /skywalking/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/ApplicationStartUp.java
- 启动服务跑在 127.0.0.1:8080
- 浏览器中访问,可以展示菜单页
3.选择一个springBoot项目
- 可以选择下载skywalking-agent.jar,或者也走源码构建的流程
- 下载地址:https://skywalking.apache.org/downloads/#JavaAgent
- 页面选择Java Agent,可以选择源码包构建,或者打包好的distribution的包
- 这边直接下载打包好的包:https://www.apache.org/dyn/closer.cgi/skywalking/java-agent/8.16.0/apache-skywalking-java-agent-8.16.0.tgz
- 在springboot启动参数中添加skywalking追踪:-javaagent:~/Downloads/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo -Dskywalking.collector.backend_service=127.0.0.1:11800
- 应用启动后能够查看到DB\REDIS相关的链接请求,访问后端服务接口,几秒后页面能够刷新报表。关注service,instance,endpoint相关指标
以上源码构建,本地部署Skywalking项目就算告一段落啦
相关文章:
Skywalking-9.6.0系列之本地源码编译并启动
Skywalking相信有很多人使用过,通过容器或者下载安装包进行安装的,今天从源代码角度,拉取、构建、启动。 官方文档步骤简洁明了,我这边会结合自己遇到的一些问题做出总结。 当前构建资源版本: MAC 10.15.7IDEA 2021.…...

proteus结合keil-arm编译器构建STM32单片机项目进行仿真
proteus是可以直接创建设计图和源码的,但是源码编译它需要借助keil-arm编译器,也就是我们安装keil-mdk之后自带的编译器。 下面给出一个完整的示例,主要是做一个LED灯闪烁的效果。 新建工程指定路径,Schematic,PCB layout都选择默…...
第五十三天
●剪辑——Pr 剪辑(Film editing),即将影片制作中所拍摄的大量素材,经过选择、取舍、分解与组接,最终完成一个连贯流畅、含义明确、主题鲜明并有艺术感染力的作品。 •线性编辑 将素材按时间顺序连接成新的连续画面的技术 •非线性编辑 …...
gorm基本操作
一、gorm安装 1.下载gorm go get -u gorm.io/gorm //gorm框架 go get -u gorm.io/driver/mysql //驱动2.mysql准备工作 mysql> create database godb; mysql> grant all on *.* to admin% identified by golang123!; mysql> flush privileges;3.导入gorm框架 impo…...
华为OD机试 - 排队游戏(Java JS Python)
题目描述 新来的老师给班里的同学排一个队。 每个学生有一个影力值。 一些学生是刺头,不会听老师的话,自己选位置,非刺头同学在剩下的位置按照能力值从小到大排。 对于非刺头同学,如果发现他前面有能力值比自己高的同学,他不满程度就增加,增加的数量等于前面能力值比…...
滚动条样式更改
::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 ::-webkit-scrollbar-button 滚动条两端的按钮 ::-webkit-scrollbar-track 外层轨道 ::-webkit-scrollbar-track-piece 内层滚动槽 ::-webkit-scrollbar-thumb 滚动的滑块 ::-webkit-scrollbar…...

掌握Python的X篇_33_MATLAB的替代组合NumPy+SciPy+Matplotlib
numPy 通常与 SciPy( Scientific Python )和 Matplotlib (绘图库)一起使用,这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。 文章目录 1. numpy1.1 numpy简介1.2 矩阵类型的nparra…...
Python解决-力扣002-两数相加
两数相加:链表表示的逆序整数求和 在这篇技术博客中,我们将讨论一个力扣(LeetCode)上的编程题目:两数相加。这个问题要求我们处理两个非空链表,它们表示两个非负整数。每个链表中的数字都是逆序存储的&…...

nginx基于源码安装的方式对静态页面、虚拟主机(IP、端口、域名)和日志文件进行配置
一.静态页面 1.更改页面内容 2.更改配置文件 3.测试 二.虚拟主机配置 1.基于IP (1)在html目录下新建目录存放测试文件 (2)修改nginx.conf文件,在htttp模块中配置两个server模块分别对应两个IP (3&am…...

[FPAG开发]使用Vivado创建第一个程序
1 打开Vivado软件,新建项目 选择一个纯英文路径 选择合适的型号 产品型号ZYNQ-7010xc7z010clg400-1ZYNQ-7020xc7z010clg400-2 如果型号选错,可以单击这里重新选择 2 创建工程源文件 可以看到文件创建成功 双击文件打开,插入代码 modul…...

使用 Python 在 NLP 中进行文本预处理
一、说明 自然语言处理 (NLP) 是人工智能 (AI) 和计算语言学的一个子领域,专注于使计算机能够理解、解释和生成人类语言。它涉及计算机和自然语言之间的交互,允许机器以对人类有意义和有用的方式处理、分析…...

[足式机器人]Part3机构运动微分几何学分析与综合Ch03-1 空间约束曲线与约束曲面微分几何学——【读书笔记】
本文仅供学习使用 本文参考: 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch01-4 平面运动微分几何学 3.1 空间曲线微分几何学概述3.1.1 矢量表示3.1.2 Frenet标架 连杆机构中的连杆与连架杆构成运动副,该运动副元素的特征点或特…...

pytest框架快速进阶篇-pytest前置和pytest后置,skipif跳过用例
一、Pytest的前置和后置方法 1.Pytest可以集成unittest实现前置和后置 importunittestimportpytestclassTestCase(unittest.TestCase):defsetUp(self)->None:print(unittest每个用例前置)deftearDown(self)->None:print(unittest每个用例后置)classmethoddefsetUpClass…...

Python 基础语法 | 常量表达式,变量,注释,输入输出
常量和表达式 我们可以把 Python 当成一个计算器,来进行一些算术运算 print(1 2 - 3) # 0 print(1 2 * 3) # 7 print(1 2 / 3) # 1.6666666666666665注意: print 是一个 Python 内置的 函数可以使用 - * / () 等运算符进行算术运算,先…...

SQL | 分组数据
10-分组数据 两个新的select子句:group by子句和having子句。 10.1-数据分组 上面我们学到了,使用SQL中的聚集函数可以汇总数据,这样,我们就能够对行进行计数,计算和,计算平均数。 目前为止,…...
软件测试技术之如何编写测试用例(6)
四、客户端兼容性测试 1、平台测试 市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应…...

论文阅读——Adversarial Eigen Attack on Black-Box Models
Adversarial Eigen Attack on Black-Box Models 作者:Linjun Zhou, Linjun Zhou 攻击类别:黑盒(基于梯度信息),白盒模型的预训练模型可获得,但训练数据和微调预训练模型的数据不可得ÿ…...
自然语言处理从入门到应用——LangChain:记忆(Memory)-[自定义对话记忆与自定义记忆类]
分类目录:《自然语言处理从入门到应用》总目录 自定义对话记忆 本节介绍了几种自定义对话记忆的方法: from langchain.llms import OpenAI from langchain.chains import ConversationChain from langchain.memory import ConversationBufferMemoryllm…...

【C/C++】STL queue 非线程安全接口,危险!
STL 中的 queue 是非线程安全的,一个组合操作:front(); pop() 先读取队首元素然后删除队首元素,若是有多个线程执行这个组合操作的话,可能会发生执行序列交替执行,导致一些意想不到的行为。因此需要重新设计线程安全的…...

执行Lua脚本后一直查询不到Redis中的数据(附带问题详细排查过程,一波三折)
文章目录 执行Lua脚本后一直查询不到Redis中的数据(附带详细问题排查过程,一波三折)问题背景问题1:Lua脚本无法切库问题2:RedisTemlate切库报错问题3:序列化导致数据不一致问题4:Lua脚本中单引号…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...