Visdom 介绍 | 二
用于创建,组织和共享实时丰富数据可视化的灵活工具。支持Python。
- 概述
- 概念
- 设置
- 用法
- API
- 注意事项
- 贡献
API
要快速了解visdom
的功能,请查看example
目录,或阅读以下详细信息。
Visdom Arguments(仅限Python)
python visdom客户端有以下几种选择:
server
:visdom服务器的主机名(默认值:'http://localhost'
)port
:visdom服务器的端口(默认值:8097
)base_url
:基本visdom服务器url(默认:/
)env
:没有提供env
时要绘制的默认环境(默认是main
)raise_exceptions
:失败时引发异常,而不是打印它们(默认值:"True"(性能好))log_to_filename
:如果不是全部,则将所有绘图和更新事件记录到给定文件中(附加模式),以便以后可以使用replay_log
来重放它们(默认值:"None")use_incoming_socket
:启用套接字以从Web客户端接收事件,允许用户注册回调(默认值:"True")http_proxy_host
:已弃用。使用Proxies参数可获得完整的代理支持。http_proxy_port
:已弃用。使用Proxies参数可获得完整的代理支持。username
:用于验证的用户名,如果服务器以-enable_login
开头(默认值:None
)password
:用于验证的密码,如果服务器以-enable_login
开头(默认:None
)proxies
:字典映射协议,用于在每个请求上使用的代理URL(例如{http
:foo.bar:3128
})。(默认值:"无")offline
:标记为在脱机模式下运行visdom,在该模式下,所有请求都记录到文件而不是服务器上。需要设置"logtofilename"。在离线模式下,所有不创建或更新绘图的visdom命令都将简单地返回True。(默认值:"False")
其他选项当前未使用(端点,ipv6)或用于内部功能。
基本功能
Visdom提供以下基本的可视化功能:
- vis.image:图片
- vis.images:图像列表
- vis.text:任意HTML
- vis.properties:属性网格
- vis.audio:音频
- vis.video:视频
- vis.svg:SVG对象
- vis.matplot:matplotlib图
- vis.save:序列化状态服务器端
绘图
我们包装了几种常见的绘图类型,以轻松创建基本的可视化效果。这些可视化由Plotly(https://plot.ly/)提供支持。
当前支持以下API:
- vis.scatter:2D或3D散点图
- vis.line:线图
- vis.stem:stem图
- vis.heatmap:热图
- vis.bar:条形图
- vis.histogram:直方图
- vis.boxplot:箱线图
- vis.surf:表面图
- vis.contour:等高线图
- vis.quiver:颤动图
- vis.mesh:网格图
通用图
请注意,服务器API遵循"数据"和"布局"对象的Plotly约定,因此你可以产生自己的任意"Plotly"可视化效果:
import visdom
vis = visdom.Visdom()
trace = dict(x=[1, 2, 3], y=[4, 5, 6], mode="markers lines", type='custom',
marker={'color': 'red', 'symbol': 104, 'size': "10"},
text=["one", "two", "three"], name='1st Trace')
layout = dict(title="First Plot", xaxis={'title': 'x1'}, yaxis={'title': 'x2'})
vis._send({'data': [trace], 'layout': layout, 'win': 'mywin'})
其他
- vis.close:按ID关闭窗口
- vis.deleteenv:通过envid删除环境
- vis.win_exists:通过ID检查窗口是否已存在
- vis.getenvlist:获取服务器上所有环境的列表
- vis.win_hash:获取窗口内容的md5哈希值
- vis.getwindowdata:获取窗口的当前数据
- vis.check_connection:检查服务器是否已连接
- vis.replay_log:从提供的日志文件中重播操作
细节
基础内容
vis.image
该函数绘制一个"img"。它以CxHxW
张量的img作为输入
支持以下opts
:
jpgquality
:JPG的质量(number
0-100)。如果已定义,图像将另存为JPG以减小文件大小。如果未定义,图像将另存为PNG。caption
:图片的标题store_history
:将所有图像存储在同一窗口中,并在底部附加一个滑块,使你可以选择要查看的图像。将新图像发送到具有历史记录的图像时,必须始终提供此选项。
注意你可以在图像窗格上使用alt查看光标的x/y坐标。你也可以按ctrl键滚动缩放,按住alt键滚动可以垂直平移,按住alt键滚动则可以水平平移。在窗格内双击以将图像恢复为默认值。
vis.images
此函数绘制"图像"列表。它需要一个输入"BxCxHxW"张量或一个"图像列表",且大小均相同。它使图像的尺寸为(B/nrow,nrow)。
支持以下参数和opts
:
nrow
:连续的图像数量padding
:在图片周围填充,在所有4条边均等填充opts.jpgquality
:JPG的质量(number
0-100)。如果已定义,图像将另存为JPG以减小文件大小。如果未定义,图像将另存为PNG。opts.caption
:图片的标题
vis.text
此函数在框中打印文本。你可以使用它嵌入任意HTML。它以"text"字符串作为输入。目前不支持特定的opts
。
vis.properties
此函数在窗格中显示可编辑的属性。属性应该是字典列表,例如:
properties = [
{'type': 'text', 'name': 'Text input', 'value': 'initial'},
{'type': 'number', 'name': 'Number input', 'value': '12'},
{'type': 'button', 'name': 'Button', 'value': 'Start'},
{'type': 'checkbox', 'name': 'Checkbox', 'value': True},
{'type': 'select', 'name': 'Select', 'value': 1, 'values': ['Red', 'Green', 'Blue']},
]
支持的类型:
- text:字串
- number:十进制数字
- button:标有"值"的按钮
- checkbox:布尔值呈现为复选框
- select:多个值选择框
value
:所选值的ID(从零开始)values
:可能值的列表
在属性值更新时调用回调:
event_type
:"PropertyUpdate"
propertyId
:在properties
列表中的位置value
:新值
目前不支持特定的opts
。
vis.audio
此函数播放音频。它以音频文件名作为输入文件或包含波形的"N"张量("Nx2"矩阵用于立体声音频)。该函数不支持任何特定于绘图的opts
。
支持以下opts
:
opts.sample_frequency
:采样频率(integer
> 0;默认= 44100)
已知问题:Visdom使用scipy将张量输入转换为wave文件。一些已知版本的Chrome不能播放这些wave文件(Firefox和Safari可以正常工作)。
vis.video
此函数播放视频。它以视频的文件名作为输入video或LxHxWxC大小的张量包含视频的所有帧作为输入。函数不支持任何特定于绘图的opts
。
支持以下opts
:
opts.fps
:视频的FPS(integer
> 0;默认= 25)
注意:使用tensor
输入要求ffmpeg已安装并工作。你能否播放视频取决于你使用的浏览器:在OGG容器中支持Theano编解码器(Chrome支持此函数)。
vis.svg
该函数绘制一个SVG对象。它以SVG字符串svgstr
或SVG文件svgfile
的名称。该函数不支持任何特定的opts。
vis.matplot
此函数绘制Matplotlibplot
。函数支持一个特定于绘图的选项:"可调整大小"。
注意:设置为"True"时,将使用窗格。你需要安装
beautifulsoup4
和lxml
软件包。注意:
matplot
的渲染后端与绘图中的绘图不同,效率较低。使用过多的Matplot窗口可能会降低视觉效果。
vis.plotlyplot
该函数绘制一个Plotly图对象。它没有显式地采用选项,因为它假定你已经显式配置了图形的"布局"。
注意你必须安装"plotly"软件包才能使用此函数。通常可以通过运行"pip install plotly"来安装它。
vis.embeddings
此函数使用Barnes-Hut t-SNE算法)可视化一组特征。
该函数接受以下参数:
features
:张量列表labels
:为features
提供的张量的相应标签列表data_getter = fn
:(可选)一个函数,该函数将要素数组中的索引作为参数并返回张量的摘要表示。如果已设置,则还必须设置"data_type"
。data_type = str
:(可选),当前唯一可接受的值是"html"
目前,我们假设唯一标签的数量不超过10个,将来,我们希望为其他情况提供可选的颜色图。
在用户界面中,你还可以围绕特征子集绘制lasso(套索)。这将在所选子集上重新运行t-SNE可视化。
vis.save
此函数保存在visdom服务器上仍然有效的envs
。它需要输入要保存的环境ID列表。
绘图
下面给出了有关绘图函数的更多详细信息。
绘制函数的输入有所不同,尽管大多数函数将包含数据的张量"X"和包含可选数据变量(例如标签或时间戳)的)张量"Y"(可选)作为输入。所有绘图函数均以可选的"win"作为输入,可用于绘制到特定窗口中。每个绘图函数还返回绘图窗口的"win"。还可以指定添加可视化效果的"env"。
vis.scatter
此函数绘制2D或3D散点图。它取一个Nx2或Nx3张量X作为输入,它指定了散点图中N个点的位置。一个包含范围在1到K之间的离散标签的可选的N个张量Y也可以指定,标签将反映在标记的颜色上。
更新可以用来有效地更新现有图的数据。使用'append'
来添加数据,使用'replace'
来使用新数据,或使用'remove'
来删除由name指定的跟踪。如果不存在,使用update ='append'
将创建一个图,否则将其追加到现有图上。如果要更新单个跟踪,请使用"name"
指定要更新的跟踪的名称。全部为NaN的更新数据将被忽略(可用于屏蔽更新)。
支持以下opts
:
opts.markersymbol
:标记符号(string
;默认='dot'
)opts.markersize
:标记大小(number
;默认='10'
)opts.markercolor
:每个标记的颜色。(torch.* Tensor
;默认=nil
)opts.legend
:table
包含图例名称opts.textlabels
:每个点的文本标签(list
:默认 =None
)opts.layoutopts
:图形后端接受布局的任何其他选项的字典。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。opts.traceopts
:字典将跟踪名称或索引映射到图形后端接受的其他选项的字典。例如traceopts = {'plotly':{'myTrace':{'mode':'markers'}}}
。opts.webgl
:使用WebGL进行绘图("boolean";默认="false")。如果绘图包含太多点,则速度更快。谨慎使用,因为浏览器在单个页面上最多允许两个WebGL上下文。
opts.markercolor是具有整数值的张量。张量的大小可以为"N"或"Nx3"或"K"或"Kx3"。
- 大小为
N
的张量:每个数据点的单个强度值。0=黑色,255=红色 - 大小为
"Nx3"
的张量:每个数据点的红色,绿色和蓝色强度。0,0,0=黑色,255,255,255=白色 "K"
和"Kx3"
大小的张量:不是每个数据点都有唯一的颜色,而是为特定标签的所有点共享相同的颜色。
vis.line
此函数绘制线图。它以一个N
或NxM
张量作为输入,"Y"
指定"M"
行的值(连接"N"
个点)绘图。它还需要一个可选的X
张量来指定相应的x轴值;X可以是N
张量(在这种情况下线将共享相同的x轴值)或具有与"Y"
相同的尺寸。
更新可以用来有效地更新现有图的数据。使用'append'附加数据,'replace'使用新数据,或'remove'删除由name
指定的跟踪。如果要更新单个跟踪,请使用"名称"指定要更新的跟踪的名称。全部为NaN的更新数据将被忽略(可用于屏蔽更新)。
支持以下opts
:
opts.fillarea
:填充线以下的区域(boolean
)opts.markers
:显示标记(boolean
;默认=false
)opts.markersymbol
:标记符号(string
;默认='dot'
)opts.markersize
:标记大小(number
;默认='10'
)opts.linecolor
:线条颜色(np.array
;默认=None)opts.dash
:每行的行破折号类型(np.array
;默认='solid'),为solid
,dash
,dashdot
或dash
之一,大小应与画线opts.legend
:table
包含图例名称opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。opts.traceopts
:dict
将跟踪名称或索引映射到plot.ly接受的其他选项的dict
。opts.webgl
:使用WebGL进行绘图("boolean";默认="false")。如果绘图包含太多点,则速度更快。谨慎使用,因为浏览器在单个页面上最多允许两个WebGL上下文。
vis.stem
此函数绘制stem图。它以一个N
或NxM
张量作为输入X
,它指定M
时间序列中N
点的值。可以指定一个可选的包含时间戳的N
或NxM
张量Y
以及如果Y
是N
张量,则所有M
时间序列都假定为具有相同的时间戳。
支持以下opts
:
opts.colormap
:颜色图(string
;默认='Viridis'
)opts.legend
:table
包含图例名称opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。
vis.heatmap
此函数绘制热图。它以一个NxM
张量X
为输入,指定热图中每个位置的值。
支持以下opts
:
opts.colormap
:颜色图(string
;默认='Viridis'
)opts.xmin
:剪辑最小值(number
;默认=X:min()
)opts.xmax
:剪辑最大值(number
;默认=X:max()
)opts.columnnames
:table
包含X轴标签opts.rownames
:包含y轴标签的table
opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。opts.nancolor
:用于绘制NaN
s的颜色。如果为"None"
,则将"NaN"
绘制为透明。(string
;默认=None
)
vis.bar
此函数绘制规则的,堆叠的或分组的条形图。它需要输入一个N
或NxM
张量X
来指定每个条形。如果"X"
包含"M"
列,则对应于每一行的值是堆叠还是分组(取决于"opts.stacked"的方式)。除了X
,还可以指定一个(可选的)N
张量Y
。包含相应的x轴值。
当前支持以下特定于图的opts
:
opts.rownames
:table
包含x轴标签opts.stacked
:在X
中堆叠多列opts.legend
:包含图例标签的table
opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。
vis.histogram
此函数绘制指定数据的直方图。它作为输入一个N张量X来指定要构造其的数据直方图。
当前支持以下特定于图的opts
:
opts.numbins
:箱数(number
;默认=30)opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。
vis.boxplot
此函数绘制指定数据的箱形图。它作为输入,一个"N"
或"NxM"
张量"X"
,用于指定其中的"N"
个数据值来构造"M"
箱形图。
当前支持以下特定于图的opts
:
opts.legend
:X中每个列的标签opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。
vis.surf
此函数绘制表面图。它以一个NxM
张量X
为输入。它指定表面图中每个位置的值。
支持以下opts
:
opts.colormap
:颜色图(string
;默认='Viridis'
)opts.xmin
:剪辑最小值(number
;默认=X:min()
)opts.xmax
:剪辑最大值(number
;默认=X:max()
)opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。
vis.contour
此函数绘制轮廓图。它以一个NxM
张量X
为输入。它指定等高线图中每个位置的值。
支持以下opts
:
opts.colormap
:颜色图(string
;默认='Viridis'
)opts.xmin
:剪辑最小值(number
;默认=X:min()
)opts.xmax
:剪辑最大值(number
;默认=X:max()
)opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。
vis.quiver
该函数绘制一个抖动图,其中箭头的方向和长度由NxM
张量X
和y
决定。可以提供两个可选的NxM
张量gridX和gridY,指定箭头的偏移量;默认情况下,箭头将在常规网格上显示。
支持以下opts
:
opts.normalize
:最长箭头的长度(number
)opts.arrowheads
:显示箭头(boolean
;默认=true
)opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。
可见网格
此函数从一组顶点中定义的一组顶点绘制网格图"Nx2"
或"Nx3"
矩阵"X"
,以及在可选"Mx2"
或"Mx3"
矩阵Y。
支持以下opts
:
opts.color
:颜色(string
)opts.opacity
:多边形的不透明度("number"介于0和1之间)opts.layoutopts
:图形后端为布局接受的任何其他选项的dict
。例如layoutopts = {'plotly':{'legend':{'x':0,'y':0}}}
。
自定义图
绘图功能采用可选的opts
表作为输入,可用于更改(通用或特定于绘图的)绘图属性。所有输入参数都在一个表中指定;输入参数根据输入表中的键进行匹配。
下列opts是通用的,因为它们对于所有可视化都是相同的(plot.image,plot.text,plot.video和plot.audio除外):
opts.title
:图形标题opts.width
:图形宽度opts.height
:图形高度opts.showlegend
:显示图例("true"或"false")opts.xtype
:x轴的类型('linear'
或'log'
)opts.xlabel
:x轴的标签opts.xtick
:在x轴上显示刻度(boolean
)opts.xtickmin
:x轴上的第一个刻度(number
)opts.xtickmax
:x轴上的最后一个刻度(number
)opts.xtickvals
:x轴上的刻度线位置("number" s的"table"表)opts.xticklabels
:勾选x轴上的标签(string
s的table
)opts.xtickstep
:x轴刻度之间的距离(number
)opts.xtickfont
:x轴标签的字体(字体信息的字典(https://plot.ly/javascript/reference/#layout-font))opts.ytype
:y轴的类型('linear'
或'log'
)opts.ylabel
:y轴的标签opts.ytick
:在y轴上显示刻度(boolean
)opts.ytickmin
:y轴上的第一个刻度(number
)opts.ytickmax
:y轴上的最后一个刻度(number
)opts.ytickvals
:y轴上的刻度位置(number
类型的s的table
)opts.yticklabels
:在y轴上打勾标签(string
类型的s的table
)opts.ytickstep
:y轴上刻度线之间的距离(number
)opts.ytickfont
:y轴标签的字体(字体信息的字典(https://plot.ly/javascript/reference/#layout-font))opts.marginleft
:左边距(以像素为单位)opts.marginright
:右边距(以像素为单位)opts.margintop
:上边距(以像素为单位)opts.marginbottom
:底边距(以像素为单位)
其他选项是特定于可视化的,并在API手册中进行了描述。
其他
vis.close
此函数关闭特定的窗口。它需要输入窗口ID"win"和环境ID"eid"。使用win
作为None
关闭环境中的所有窗口。
vis.delete_env
此函数将完全删除指定的环境。它需要env ideid
作为输入。
注意:
delete_env
删除环境中的所有数据,并且是不可撤销的。除非绝对要删除环境,否则请勿使用。
vis.fork_env
此函数派生类似于UI功能的环境。
参数:
prev_eid
:我们要fork的环境ID。eid
:将用fork创建的新环境ID。
注意:
fork_env
如果不存在的env被fork,则会发生异常。
vis.win_exists
该函数返回一个布尔值,指示服务器上是否已经存在窗口"win"。如果出现问题,则返回None。
可选参数:
env
:搜索窗口的环境。默认为None
。
vis.getenvlist
此函数在调用时返回服务器上所有环境的列表。它不带参数。
vis.win_hash
如果服务器上存在窗口"win"的内容,则此函数返回md5哈希值。否则返回None。
可选参数:
env
:搜索窗口的环境。默认为None
。
vis.getwindowdata
此函数返回给定窗口的窗口数据。如果win为None,则返回环境中所有窗口的数据。
参数:
env
:搜索窗口的环境。win
:要为其返回数据的窗口。设置为"无"以检索环境中的所有窗口。
vis.check_connection
此函数返回布尔值,指示是否已连接服务器。它接受可选参timeout_seconds
数秒以等待服务器启动。
vis.replay_log
此函数获取虚拟日志的内容,并将其重播到当前服务器以恢复状态或处理所有丢失的条目。
参数:
log_filename
:重播日志文件的内容。
许可
visdom的许可是LICENSE文件中的Creative Commons Attribution-NonCommercial 4.0 International Public许可。
关于Lua Torch支持的注意事项
在v0.1.8.4
之后,不再支持Lua Torch。如果你想使用Torch支持,则需要下载该版本。你可以在此处按照使用说明进行操作,但不再受正式支持。
贡献
请参阅在CONTRIBUTING.md的贡献
致谢
Visdom受到display之类的工具的启发,并依赖Plotly(https://plot.ly/)作为绘图前端。
欢迎关注磐创博客资源汇总站:http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:http://pytorch.panchuang.net/
OpenCV中文官方文档:http://woshicver.com/
Visdom 介绍 | 二的更多相关文章
- Lucene.Net 2.3.1开发介绍 —— 二、分词(六)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(六) Lucene.Net的上一个版本是2.1,而在2.3.1版本中才引入了Next(Token)方法重载,而ReusableStrin ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(五)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(五) 2.1.3 二元分词 上一节通过变换查询表达式满足了需求,但是在实际应用中,如果那样查询,会出现另外一个问题,因为,那样搜索,是只 ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(三)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(三) 1.3 分词器结构 1.3.1 分词器整体结构 从1.2节的分析,终于做到了管中窥豹,现在在Lucene.Net项目中添加一个类关 ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(四)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(四) 2.1.2 可以使用的内置分词 简单的分词方式并不能满足需求.前文说过Lucene.Net内置分词中StandardAnalyze ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(二)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(二) 1.2.分词的过程 1.2.1.分词器工作的过程 内置的分词器效果都不好,那怎么办?只能自己写了!在写之前当然是要先看看内置的分词 ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(一) Lucene.Net中,分词是核心库之一,当然,也可以将它独立出来.目前Lucene.Net的分词库很不完善,实际应用价值不高.唯 ...
- {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- MySQL行(记录)的详细操作一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理
MySQL行(记录)的详细操作 阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: ...
随机推荐
- Node学习(二) --使用http和fs模块实现一个简单的服务器
1.创建一个www目录,存储静态文件1.html.1.jpg. * html文件内容如下: 12345678910111213 <html lang="en">< ...
- 自己查与写的批量比较bash
前言:互测的时候一个一个输入感觉太麻烦,于是尝试写自己的对拍,又想到os刚学了bash命令行处理,于是想把两者结合一下减轻自己的工作量 分两步: 将所有人的工程导出成jar文件 放到linux下用ba ...
- uWSGI, send_file and Python 3.5
当你的Flask项目通过Nginx+uWSGI成功部署的时候,当你很高兴你Flask里面的接口成功跑通的时候,你会发现真高兴!好牛逼! 然后当你写了其他几个接口的时候,在启动uWSGI服务的时候,死活 ...
- Nginx之负载均衡配置(二)
前文我们聊到了nginx作为负载均衡的配置,前端nginx作为调度器调度http或https请求,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12458159 ...
- django验证码框架captcha
1.安装 2.在settings.py 安装app中添加 3.添加url 4.运行makemigrations和migrate 5.运用 在form表单中定义 view中返回form表单 在前端htm ...
- nohub 将程序永久运行下去
今天看了一遍文章,一直以为将程序制成sh脚本,通过crontab来间隔执行以为是真的不断执行,后来才发现是错误的,每隔一段时间都会执行一次,都会占用一个进程,难怪一看进程几十来个同样名字的进程在运行 ...
- ElasticSearch 6.2.4 实践
参考资料 ElasticSearch 官网 ElasticSearch,Kibana,Asp.net Core with docker 示例 阮一峰 ElasticSearch 基础概念 索引(ind ...
- golang的sync.WaitGroup使用示例
下面一段代码 len(m) 不一定会打印为 10,为什么?.如果想要 len(m) 打印为 10,应该怎么修改代码? func main() { const N = 10 m := make(map[ ...
- 洛谷P1000超级马里奥的神奇解法
话说上过洛谷的都知道,有一道经典例题P1000超级马里奥,这一题,可以说是非常简单非常经典,但是就算如此,还是可以人才辈出,我是个比较循规蹈矩的人(雾),所以我的代码就比较平常,也就是直接输出了所要求 ...
- ES6、ES7、ES8语法总结
ES6 1. var let const let,const具有块级作用域,不具有变量提升 const 用于不能被重新赋值的变量 2. 箭头函数 我们经常要给回调函数给一个父级的this 常用办法就是 ...