- 博客(83)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Python项目如何区分配置开发环境/生产环境settings
基于django的灵感,我们可以首先将项目配置文件夹配置成下面这样:conf/ __init__.py base.py settings_dev.py settings_prod.py然后我们需要在__init__.py文件中根据当前所属环境来引用对应的settings文件:import importlibclass Settings(object): """The implementation class of the settings.""" def __init__(self,
2020-08-06 19:53:40
3553
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Ansible全套详细教程
我们使用ssh与托管节点(服务器)通信,默认使用sftp(使用SSH协议进行FTP传输的协议叫做SFTP,),如果不可用,需要在ansible.cfg文件中配置成scp方式这里不建议使用virtualenv虚拟环境来安装ansibleInventory文件对于每一个host可以选择连接类型和连接用户名:[targets]localhost ansible_connect...
2019-06-11 14:30:46
29623
9
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 SqlAlchemy做数据库缓存 -- dogpile.cache
dogpile是一种控制结构,它允许选择单个执行线程作为某些资源的“创建者”,同时允许其他执行线程在创建过程中引用此资源的先前版本。dogpile.cache是一个缓存API,它提供了一个通用接口来缓存任何种类的后端。首先安装dogpile:pip install dogpile.cache现在有很多有名的key/value服务比如说redis Memcached,他们都很适合用于缓存,...
2019-03-29 11:12:32
1617
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 命令行执行python文件显示ModuleNotFoundError: No module named ‘...‘解决办法
在一个项目中如果我们使用类似pycharm这样的软件来写项目,项目中有些文件需要单独执行的时候,我们通常会使用软件自带的执行按钮来运行python脚本,但是有时候我们需要使用在命令行内敲击python run.py这样的方式来运行脚本,这时就会出现ModuleNotFoundError: No module named ‘…’ 这样的报错。这样报错的原因是我们import模块的时候使用的是相对路...
2019-02-15 09:24:12
46512
7
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 机器学习之监督学习supervised learning
分类与回归监督学习的问题主要有两种,分别是分类classification和回归regression。分类: 分类问题的目的是预测类别标签class label,这些标签来自预定义的可选列表。回归: 回归任务的目的是预测一个连续值,也叫作浮点数floating-point number,即预测值不是一个类别而是一个数字值。打个比方,假如要根据一个人的年龄学历等feature来预测这个人的收入...
2018-11-22 18:59:44
16987
原创 什么是SATA/PCI-E, M.2, U.2, NVMe...固态硬盘接口协议详解
1. 硬盘接口,通道,协议首先是物理层面的接口,就是插拔的那个口:我们有SATA 3,mSATA,SATA - E,U.2,M.2,PCI-E等物理接口。然后是通信的通道,主要的区别是速率上限不同,主要有:PCI-E通道:其中PCI-E通道又有PCI-E X1,X4,X8,X16,X32,速率依次上升STAT 通道SAS通道:企业级别硬盘用的通道FC通道:光纤通道等等最后是数据传输的协议,严格来说应该是基于设备逻辑接口的总线传输协议规范:IDE协议:机械硬盘AHCI协议:基于SAT
2022-01-13 17:15:15
17713
3
原创 在docker container和k8s pod中挂载主机上的硬盘(排坑指南)
有一些业务需求要求我们在k8s pod或者docker container中用程序挂载本机的硬盘执行mount操作,下面我们以k8s pod为例,讲解一下在实现过程中遇到的各种坑。至于docker container的实现方法和k8s原理一致,查一下相关参数就好containers: - name: xxx terminationMessagePath: "/tmp/termination-log" # 重要 securityContext:
2021-12-27 12:42:12
3300
原创 Python动态配置 -- Dynaconf
1. 初始化dynaconf init -f <fileformat> 命令可以初始化dynaconf,它支持toml|yaml|json|ini|py几种文件类型,toml也是默认的文件格式,他会自动创建:├── config.py # Where you import your settings object (required)├── .secrets.toml # Sensitive data like passwords and tokens (optional)
2021-12-01 15:48:10
2148
原创 Docker全套用法使用详解
1. Docker使用前概要:1.1 背景:Docker使用google的go语言实现的Docker VS 传统虚拟化方式:传统虚拟化技术是虚拟出一套硬件后,在上面运行一个完整的操作系统,然后在这个系统上面运行程序。而docker容器内的程序直接运行于宿主的内核,容器是没有自己的内核的,也没有进行硬件虚拟,所以更加的轻便Docker有三个基本概念:镜像:操作系统分为内核和用户空间,对于linux而言,内核启动后,会挂载root文件系统提供用户空间支持。而Docker镜像image就相当
2021-10-20 14:55:18
3845
原创 Ubuntu实时显示系统CPU、网络等使用情况小插件 -- indicator-sysmonitor
sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitorsudo apt-get updatesudo apt-get install indicator-sysmonitor打开后,界面右上角会出现:右键点击 -> Preferences -> AdvancedCustomized Output可配置如下:【cpu: {cpu}】【 mem: {mem}】【 net:{net}】...
2021-08-25 15:49:29
1021
原创 Hive全套知识详解
1. 什么是HiveHive是facebook开发的,是一个基于Hadoop的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并且提供HQL,也就是Hive SQL查询功能,底层数据实际上是存储在HDFS上面的。那么Hive的本质其实是将SQL语句转化为MapReduce任务运行的,可以让不熟悉MR的用户可以简单的通过Hive SQL来访问HDFS上结构化的数据,并且Hive适用于离线的批量数据计算。Hive的特点:可拓展性强,可以自由的拓展集群的规模,一般不需要重启服务横向拓展。延展性
2021-05-12 14:54:48
1171
原创 Python单例模式并且保证只被初始化一次
单例模式假设我们有一个日志记录器的类,现在我们不希望在每一个需要写入日志的地方生成一个日志记录器,那么我们的做法是:如果已经在程序中存在一个日志记录器,那么就获取它;如果不存在,则新创建一个日志记录器。class SingletonObject(object): def __init__(self): pass __instance = None # 这里我们需要定义一个类属性用...
2021-03-11 16:51:41
829
翻译 什么是RPC
HTTP协议主要是以restful规范为代表,优势很大,并且可读性好,可以得到防火墙、跨语言的支持。但是HTTP的缺点也很明显,首先HTTP工作在第七层,包含了大量的HTTP头部信息,所以它有用信息占比少,效率低。我们首先对HTTP以及RPC有一个对比,主要有两个问题:1. HTTP和RPC是同一个级别吗,或者是被RPC包含。2. restful也属于RPC吗根据上图,我们可以看到HTTP出现了两次,一个是和RPC并列的,都是跨应用调用方法的解决方案。另一个则是被RPC包含的,是RPC通信过程的可
2020-12-08 14:56:29
1591
原创 Ubuntu搭建Hadoop伪分布式集群全套流程详解
创建hadoop用户sudo useradd -m hadoop -s /bin/bash # 创建新用户sudo passwd hadoop # 为新用户设置密码sudo adduser hadoop sudo # 为新用户设置权限su hadoop # 切换到新用户sudo apt-get update配置ssh无密码登录集群,单节点模式都需要用到ssh登录,默认ubuntu上面已经有ssh client,还需要安装ssh server之后的操作如何各种输入密码就很麻烦,所以
2020-08-27 15:46:01
2093
1
原创 安装Hadoop超详细流程(亲测有效)
Hadoop的核心为HDFS、YARN、MapReduce1. 安装JAVA和Hadoop首先准备好环境:CentOS-7然后下载JDK,这里注意hadoop目前只支持jdk7和jdk8,不支持jdk11安装OpenJDK:sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel然后需要配置JAVA_HOME环境变量:vim /etc/profile JAVA_HOME=/usr/lib/jvm/java-1.8.0-openj
2020-08-13 19:43:59
809
原创 Elasticsearch学习笔记
Elasticsearch is a distributed, real-time, search and analytics platform.解释一下,分布式是指它管理了集群粒度节点上的信息,所以它会在多个servers上面运行。实时是指我们通过query可以非常快的拿到结果,最后一点就是查找和分析,我们主要就是用这个玩意儿去explore data。所以说像ES这样的平台是任何搜索引擎的基础。它使用了restful API,ES会自动的储存数据并且为数据建立索引,它使用JVM以为了使用起来足够的快
2020-08-11 16:33:27
184
原创 WIN10 WUSP协议结合数据库分析简要
Client-Server Protocol enables client machines to determineavailable, applicable software updates, and to download those updates for installation. This protocol isa SOAP-based protocol that uses HTT...
2020-08-05 20:47:24
305
1
翻译 数据库基础知识汇总
建表时通常要建立一个与业务无关的自增主键使用整型比字符类型主键效率更高,为分库分表做路由打基础,如果按照时间排序,但是没有给时间字段建立索引,就可以通过id来进行排序。mysql优化开启mysql缓存,不使用CURDATE,NOW,RAND等函数,这些函数可能会导致缓存不开启建立并且使用索引只查询需要的字段,不适用select *列长度尽可能小,最好固定长度,能用char就不用var...
2020-08-05 20:46:17
138
原创 记录OpenTSDB使用过程中遇到的问题
前面是安装流程https://blog.ronpy.com/2018/05/opentsdb-setup.htmlsudo /etc/init.d/opentsdb startsudo /etc/init.d/opentsdb stopsudo /etc/init.d/opentsdb status当使用时出现metrics invalid的情况,我们需要将配置文件里面设置为自动生成不...
2020-04-28 19:29:54
1329
1
原创 python使用typing
def greeting(name: str) -> str: return 'Hello ' + name复杂类型typing:from typing import ListVector = List[float]def scale(scalar: float, vector: Vector) -> Vector: return [scalar * num...
2020-04-26 09:05:52
2336
原创 ROS(机器人操作系统)教程(一)
ROS:ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构,ROS也就是robot operating system,他的主要目标是为了机器人研究和开发提供代码复用的支持。ROS是一个分布式进程,也就是节点框架,这些进程被封装在易于被分享和发布的程序包和功能包中。catkin:ROS的原始编译和打包系统是rosbuild,而catkin是现在ROS的官方指定系统,catkin的原理和流...
2020-04-09 14:46:09
658
原创 make和cmake详解
平时我们工作的时候只要看到CMakeLists.txt文件,就会在终端使用cmake和make,但是很多时候我们并不清楚他们到底做什么事make要设计一个软件,我们首先编写源码,然后通过编译器编译和创建可执行文件,可执行文件就是要实现最终功能的文件。make工具需要清楚的知道如何构建程序,他通过makefile文件知道如何构建你的程序,这个文件列出了所有的非源码文件以及如何由别的文件来计算。...
2020-04-09 13:23:12
1848
原创 Python Websocket 实例 -- http接收数据websocket推出去
我们使用python的channels库来使用WebsocketHTTP接收数据:class MessageConsumer(generic_http.AsyncHttpConsumer): async def handle(self, message): # handle the message await channel_layer.group_send( group_na...
2020-01-07 19:44:20
941
原创 使用context manager创建thrift client的统一入口
"""Utilities for building the thrift transport client."""import contextlibfrom thrift.protocol import TBinaryProtocolfrom thrift.transport import TSocket, TTransport@contextlib.contextmanagerd...
2020-01-07 11:59:49
152
原创 Python协程
※ python协程协程也称之为微线程,协程的作用是在执行函数A的情况下,可以随时中断去执行函数B,然后终端继续执行函数A,但是这个过程并没有函数调用,协程只有一个线程在执行。所以协程由于是程序主动控制切换的,所以没有线程切换的开销(存在两个必要的开销:线程的创建和上下文的切换,切换前,上个任务的状态会被保存,切换回来,再加载这个任务的状态),所以执行效率很高,使用于IO密集型,如果是CPU密...
2019-08-29 15:41:09
223
原创 c语言实现单向链表和双向链表
链表:它是一种物理储存单元上的非连续,非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现。链表由一系列结点组成,每个结点包括两部分,一个是储存数据元素的数据域,一个是储存下一个结点地址的指针域顺序表:顺序表是使用数组存储线性的元素,因为逻辑上相邻的元素物理上也相邻,所以插入删除需要移动后面的所有元素,但是链表使用指针来表达后面结点的逻辑关系,所以插入和删除只需要修改指针即可。链...
2019-07-31 15:48:04
954
1
原创 python的性能优化方案
line_profiler是一个对函数进行逐行分析的模块,kernprof是一个可以运行line_profiler或者python标准库cProfile的一个很方便的脚本工具。安装:$ pip install line_profiler首先使用kernprof脚本运行来开始我们的性能优化工作:$ kernprof -l script_to_profile.py上面的操作会创建一个Lin...
2019-06-20 15:12:15
801
原创 公钥与私钥,以及nginx配置https
公钥和私钥:A有两把钥匙,一个是公钥,一个是私钥公钥是可以给别人的,所有A给了X,Y,Z三个人公钥(三个人的公钥是相同的)场景一:X给A写一封私密的信,所以用A的公钥加密,那么A收到信后,可以使用他自己手上的私钥解密,那么就可以看到信件的内容,没有私钥的人是看不到信件的内容的。A要给X回信,那么就需要用到数字签名:先使用hash函数生成信件的digest再使用私钥对这个diges...
2019-05-27 16:25:31
4195
1
原创 消息队列(2) -- Redis实现消息队列(多应用)
异步任务: 很多时候服务器做的事情不需要客户端等待,所以可以把这些任务异步去做,主要原理是处理通知消息,然后针对通知消息通常是采取的队列结构。实现消费者和生产者的方式很多,可以使用Python的标准库Queue:import randomimport timefrom Queue import Queuefrom threading import Threadqueue = Queu...
2019-04-23 11:22:22
1104
原创 任务队列/任务调度:Celery和APScheduler(内含APScheduler实例)
首先安装pip install apschedulerAPScheduler有四个组件:triggers: 触发器,用于设定触发任务的条件,触发器包含了调度的逻辑,每个任务都有自己的触发器决定该任务下次运行的时间。job stores: 任务储存器,用于存放任务,把任务放在内存或者数据库中,一个executors: 执行器,用于执行任务,可以设定执行模式为单线程或者线程池,任务完毕后,执...
2019-04-18 13:04:07
5405
转载 消息队列(1) -- Blinker信号库 for Python(单应用)
blinker是一个python的信号库,既支持简单的对象到对象通信,也支持针对多个对象进行组播,信号就是在框架的核心功能或者一些Flask拓展发生动作时所发送的通知,可以帮助解耦应用,解耦就是模块间的耦合严重了,修改一些东西,可能会牵扯到很多其他的地方,所以需要减少类之间的相互依赖,所以需要代码解耦。创建信号:>>> from blinker import signal&...
2019-04-08 09:41:19
1557
翻译 Flask-REST-JSONAPI
Flask-REST-JSONAPI是Flask的扩展,它为JSONAPI 1.0规范提供了极大的灵活性,可以快速构建REST API。Logical data abstraction逻辑数据抽象这是将资源暴露给api,而不是对数据结构的精确映射。首先我们有SQLAlchemy的orm:from flask_sqlalchemy import SQLAlchemydb = SQLAlc...
2019-03-18 16:28:59
1088
原创 linux终端使用terminator+zsh并且使用oh my zsh美化
安装terminator:sudo apt-get install terminator安装zsh取代bash:sudo apt-get install zsh将zsh设置为默认的shell:chsh -s $(which zsh)重启后看到配置选项,选择第二个安装oh my zshsh -c "$(curl -fsSL https://raw.githubuserc...
2019-03-14 14:23:23
2869
原创 Linux上python如何切换版本
假设原本机子上面就有python2.7,然后我们使用pyenv安装了python3.6Method one下面我们为python2.7和3.6分别设置权重:sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1sudo update-alternatives --install /usr...
2019-03-07 13:52:08
647
原创 使用Nginx+Gunicorn+systemd部署flask应用
web服务器,web应用,WSGI 之间的联系:WSGI翻译为python web服务器网关接口–>python的应用(Flask)和web服务器(比如Nginx)之间的通信协议,所以如果想让应用在web服务器上运行就必须遵守这个WSGI协议实现WSGI协议的web服务器有uWSGI和Gunicorn,所以很多地方都是使用Nginx+Gunicorn的部署方式,但是实际上直接使用...
2019-02-27 13:43:40
1157
2
原创 python的进阶用法
以列表的某个值为key进行排序:alist = [[1,2], [2,3], [3,4], [2,6], [4,7]]sorted_list = sorted(alist, key=operator.itemgetter(1))这样的话就是对大列表中的每个小列表的第二个值进行排序以字典的value进行排序:adict = {'1': 10, '2': 22....}sorted_l...
2019-02-26 20:21:53
474
转载 Nginx
Nginx就是一个HTTP服务器,可以将服务器上面的静态文件比如html,图片,影音通过HTTP协议的方式传递给客户端,这种情况下,nginx的配置是:server { listen 8000; # 端口号 location / { root /usr/share/nginx/html; # 静态文件的路径 }}反向代理服务器同时Nginx还是一个反向代理服务器:正常情...
2019-02-25 16:24:24
368
原创 前后端分离模式下前端与后端数据交互
下面举的例子就是使用jQuery Ajax和Python Flask进行前后端交互时,前端提交表单数据到后端,后端返回JSON数据给前端。前端GET提交表单数据:# GET请求var data = { "name": "test", "test": "test",};$.ajax({ type: 'GET', url: /your/url/, ...
2019-02-19 14:04:14
15968
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人