
Python
allenxguo
C++
展开
-
【RPC-Python】分布式 RPC 知识基础
分布式 RPC 知识基础分布式 RPC 知识基础杀死子进程信号处理函数错误码特殊信号收割子进程信号连续打断kazoo分布式 RPC 知识基础本节要学习一下 ZooKeeper 的进程管理、信号处理和服务发现的 Python 客户端基本使用。杀死子进程killparentchildPython 提供了 os.kill 函数,它可以向指定进程发送信号。比如你要强制杀死某个进程,可以向它发送...转载 2018-09-17 22:24:09 · 1515 阅读 · 0 评论 -
【Python】序列使用+和*以及增量赋值
序列+和*操作示例:l = [1,2,3]print(id(l), l)l *= 2 #运用增量乘法后,列表的 ID 没变,新元素追加到列表上print(id(l), l)l = l * 2 #此时创建一个新的对象后 赋值给了lprint(id(l), l)#元组的是不可变序列t = (1,2,3)print(id(t), t)t *= 2 ...原创 2018-06-03 20:06:12 · 614 阅读 · 0 评论 -
【Python】切片
切片python的列表、元组和字符串这类序列都支持切片操作,用起来十分方便。 格式如下: list[start:stop:step] 含义是:在start和stop之间以step间隔取值。负值意味着反向取值!list = [1,2,3,4,5,6,7,8]print(list[3:]) #从三开始取print(list[:3]) #...原创 2018-06-03 18:42:03 · 238 阅读 · 0 评论 -
【Python】杂记
本系列博客主要记录python中一些很方便的特性,技巧以及坑等等。正题: 1、原创 2018-06-03 18:05:31 · 202 阅读 · 0 评论 -
【Python】测量小代码段的执行时间
计算程序运行时间的方法有很多种,比如舒勇time模块,datetime等等。当然还有很多其他方法,比如使用python的time示例#待执行的 小段代码cmd = '[abs(x) for x in values]'#输入setup = '''values = [1,2,3,4]'''# 这里取100w次 方便查看结果count = 1000000# 计算平均值...原创 2018-03-13 21:20:30 · 431 阅读 · 0 评论 -
LeetCode刷题记录1-两数之和
该系列博客记录每天在leetcode的刷题记录。题目给定一个整数数组,返回两个数字的索引,使它们加起来成为一个特定的值。(不可以使用同一个元素2次)普通解法这可能是大家最快能想到的方法了,直接列出来(简单粗暴双重循环):vector<int> twoSum(vector<int> nums, int target) { int i = 0; int j = 0; for (a原创 2017-11-10 22:53:56 · 268 阅读 · 0 评论 -
Python基础-UDP编程
UDP是面向无连接的协议。不需要建立连接,只需要知道对方IP端口即可。服务器import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)#绑定端口s.bind(('127.0.0.1', 10000))print('udp bind ok')while True: #等待收数据 data ,addr = s.r原创 2017-06-28 11:50:43 · 278 阅读 · 0 评论 -
Python基础-TCP编程
Tcp的基本概念就不错说了,主要介绍一下python的socket使用。服务器需要绑定一个端口并开始监听其他客户端连接。import socketimport threadingdef thread_fun(sock,addr): print('accept new client from %s:%s' % (sock, addr)) sock.send('hello'.encod原创 2017-06-28 11:33:22 · 374 阅读 · 0 评论 -
Python爬虫-进程池方式爬取头条视频
首先进入今日头条视频首页。分析网页 其中href属性下的连接就是我们需要下载的视频。在下载全部视频之前应该分析一下单视频下载的方法。下载一个视频首先查看单个视频的网页页面 我们需要获取var mp4下的视频。但是这个语句应该是JS的?可以使用正则匹配到连接。def get_video_url(url): try: res = requests.get(url)原创 2017-06-15 17:07:26 · 3616 阅读 · 0 评论 -
Python爬虫-爬取慕课网课程
Python爬取网络图片使用正则表达式解析Html格式的文件(其他更好的方法以后会继续更新)获取慕课网课程图片网站链接 http://www.imooc.com/search/?words=python 图1 网站页面从网站上获取课程图片 首先查看页面html代码 图2 html代码 图3 html代码可知图片的一个标签链接样式是 http://szimg.mukewang.co原创 2017-06-02 22:35:56 · 4694 阅读 · 0 评论 -
EffectiveC++学习笔记-条款20|21
条款20 以pass-by-reference-to-const替换pass-by-value 缺省情况下C++以by-value方式传递对象至函数。比如在继承体系中一个简单的传值引起拷贝构造函数、多次构造函数以及析构函数的调用,这种方式的成本是非常高的。但是其实C++内部的references是指针方式实现的,所以pass by reference通常是传递的指针,如果对象属于内置类型,例如in原创 2017-06-27 14:48:58 · 367 阅读 · 0 评论 -
Python基础-分布式进程
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个进程中,依靠网络通信。由于managers模块封原创 2017-06-27 17:46:18 · 506 阅读 · 0 评论 -
Python基础-ThreadLocal
在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁。 但是局部变量也有问题,就是在函数调用的时候,传递起来很麻烦。 一个参数可能会传递很多次ThreadLocal就是为此而准备的。import threading#一个ThreadLocal对象local_user_file = thre原创 2017-06-27 17:05:53 · 624 阅读 · 0 评论 -
Python基础-多线程
多线程多任务可以由多进程完成,也可以由一个进程内的多线程完成。 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。 Python的标准库提供了两个模块:_thread和threading,_thread是原创 2017-06-26 21:22:34 · 278 阅读 · 0 评论 -
【Python】内存视图(操作数据共享内存)
memoryviewmemoryview可以使用不同的方式读取和操作同一块内存,并且原有的内存字节不会随意移动。类似于C中的强转。例如,使用memoryview修改一个短整型有符号整数数组的数据。from array import arrayfrom random import randomnumbers = array('h', [-2, -1, 0, 1, 2]) #sign...原创 2018-07-01 16:15:45 · 2222 阅读 · 0 评论 -
【RPC-Python】RPC消息协议设计
本系列均来自大神“老钱”的小册学习 https://juejin.im/user/5a9c4a13f265da23826d733a深入理解RPC消息协议设计对于一串消息流,我们必须能确定消息边界,提取出单条消息的字节流片段,然后对这个片段按照一定的规则进行反序列化来生成相应的消息对象。消息边界RPC 需要在一条 TCP 链接上进行多次消息传递。在连续的两条消...转载 2018-08-05 11:50:18 · 1725 阅读 · 0 评论 -
【RPC-Python】Redis文本协议结构
RedisRedis 在互联网存储技术上使用非常普遍,它以高性能高并发、易于理解和易于使用而广泛应用于互联网服务的存储系统上。Redis 要对外提供存储服务,客户端和服务器之间免不了也要进行 RPC 通信,Redis 作者 Antirez 为 Redis 设计了一套专用的文本通讯协议 RESP。Antirez 认为数据库系统的瓶颈一般不在于网络流量,而是数据库自身内部逻辑处理上。所以即...转载 2018-08-05 13:00:29 · 1267 阅读 · 1 评论 -
【RPC-Python】深入RPC分布式原理
前面几节讲的都是单机 RPC 服务的模式,无论是多线程也好多进程也好,它们都只能算是单点的设计。现代企业的关键性 RPC 服务是绝不可以只使用单点部署的。本节我们要对 RPC 服务进行分布式化,使得服务可以容忍个别节点故障仍能继续对外提供服务。客户端当 RPC 服务部署在多个节点上时,客户端得到的是一个服务列表,有多个 IP 端口对。客户端的连接池可以随机地挑选任意的 RPC 服务...转载 2018-09-04 21:53:43 · 3576 阅读 · 1 评论 -
【RPC-Python】多进程描述符传递模型
这个一个基于Node Cluster的多进程并发模型。Nginx 并发模型我们知道 Nginx 的并发模型是一个多进程并发模型,它的 Master 进程在绑定监听地址端口后 fork 出了多个 Slave 进程共同竞争处理这个服务端套接字接收到的很多客户端连接。 这多个 Slave 进程会共享同一个处于操作系统内核态的套接字队列,操作系统的网络模块在处理完三次握手后就会将套接字塞...转载 2018-09-04 21:10:54 · 643 阅读 · 0 评论 -
【RPC-Python】单进程异步模型
单进程异步模型本小节我们开始讲 RPC 的异步模型。异步模型是现代服务器的通用模型,它比古典的同步模型在效率上要高出一大截,但是编程难度上也要加大不少,需要程序员有较高的编程素养。关于如何应用异步模型,我们需要要先从非阻塞 IO 开始讲起,逐步理解基本原理和必备的工具和库之后,再用代码实现。非阻塞IO操作系统提供的文件读写操作默认都是同步的,它必须等到数据就绪后才能返回,如果数据没有就...转载 2018-08-28 22:42:32 · 1304 阅读 · 0 评论 -
【RPC-Python】多进程同步模型
上节我们完成了一个简单的多线程服务器,可以并发处理多个客户端连接。但是 Python 里多线程使用的并不常见,因为 Python 的 GIL 致使单个进程只能占满一个 CPU 核心,多线程并不能充分利用多核的优势。所以多数 Python 服务器推荐使用多进程模型。我们将使用 Python 内置的 进程模块创建子进程。multiprocessing多进程运行模型如下: # serv...原创 2018-08-28 22:05:20 · 1351 阅读 · 0 评论 -
【RPC-Python】多线程同步模型
上节我们编写了一个最简单的 RPC 服务器模型,简单到同时只能处理单个连接。本节我们为服务器增加多线程并发处理能力,同时可以处理多个客户端连接。后来的客户端连接再也不用排队了。这也是古典 RPC 服务最常见的处理模型。既然要使用多线程,自然离不开 Python 内置的多线程编程库。我们在上节引出的 socket、struct 和 json 三个库的基础上再增加第四个内置库 thread,本节程...转载 2018-08-16 22:32:09 · 1353 阅读 · 0 评论 -
【RPC-Python】单线程同步模型
如上图所示,现在我们开始使用代码来描述 RPC 的服务器模型,从简单变化到复杂,从经典变化到现代。简介本节我们会主要讲解以下内容:使用三个非常重要的 Python 内置的库,它们分别是 socket、struct 和 json,分别承担 RPC 服务的网络通信功能、字节转换功能和消息序列化功能。网络通信的内容是字节序列,消息序列化的目标是将 Python 的数据结构转换...转载 2018-08-13 22:28:16 · 957 阅读 · 0 评论 -
【Python】简单的网络通信
简介python实现简单的服务器和客户端实现,主要使用了struct、json、socket库。属于【深入理解RPC】基于Python自建分布式高并发RPC服务的练习文章小结正题交互规则# 业务交互输入和输出(客户端和服务)# 采用协议头长度划分业务# | head(4byte) | data(...) |# {# "in" : "ping"# "params...原创 2018-08-18 10:17:50 · 732 阅读 · 0 评论 -
【RPC-Python】深入 RPC 客户端设计
RPC 客户端实现起来要比服务器简单,所以我们先讲客户端的实现原理和方法。当然,实现 RPC 客户端也具有一定的挑战性,其核心难点在于客户端往往并不是单线程的,我们需要考虑多线程下如何流畅使用客户端而不出现并发问题。我们将根据下图所示的模型图逐步讲解: 在多线程客户端中,客户端和数据库之间会维护一个连接池。当线程中的代码需要访问数据库时,先从连接池中获取一个连接,与数据库交互完成后再将这...原创 2018-08-12 16:51:03 · 2228 阅读 · 0 评论 -
【RPC-Python】Redis 协议的缺陷
连接重连RPC 是建立在 TCP 协议基础上进行消息传递,而 TCP 连接并不总是稳定的,它会受到网络波动的影响而导致连接断开。同时大部分服务器也会限制空闲连接的生存期,如果一个 TCP 连接闲置过久,也会被服务器主动关闭。如果这个 RPC 是以手机作为客户端发起的请求,那么这种连接断开的情况就更为频繁,用户的网络切换行为随时都会引发连接断开。当 RPC 连接断开时,客户端一般都需要实现连...原创 2018-08-12 15:52:42 · 1104 阅读 · 0 评论 -
【RPC-Python】Protobuf二进制协议结构
ProtobufProtobuf 协议是 Google 开源的二进制 RPC 通讯协议,它可能是互联网开源项目中使用最为广泛的 RPC 协议。Protobuf 提供了一种描述通讯协议的接口描述语言 IDL,通过编写接口协议,Protobuf 可以自动生成多种语言的 RPC 通讯代码,目前官方已经支持了近 10 种语言。协议格式| key1 | value1 | key2 | v...转载 2018-08-10 21:41:43 · 3222 阅读 · 0 评论 -
【RPC-Python】RPC交互过程
本系列均来自大神“老钱”的小册学习 https://juejin.im/user/5a9c4a13f265da23826d733a什么是RPCRPC (Remote Procedure Call)即远程过程调用,是分布式系统常见的一种通信方法,已经有 40 多年历史。当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手段之一。除 RPC 之外,常见的多...原创 2018-08-01 22:25:14 · 8052 阅读 · 2 评论 -
【深入理解RPC】基于Python自建分布式高并发RPC服务
系列索引:原创 2018-08-01 22:03:32 · 4431 阅读 · 0 评论 -
Python基础-进程间通讯
进程间通讯 windows下进程间通讯有很多种,例如:消息队列、共享内存、管道等等。 Python的multiprocessing模块包装了底层的机制,提供了Queue、Pipes等多种方式来交换数据。Pipesmultiprocessing.Pipe()即管道模式,调用Pipe()返回管道的两端的Connection。Python官方文档的描述: Returns a pair (conn1,原创 2017-06-26 10:04:21 · 573 阅读 · 0 评论 -
Python基础-多进程
进程Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。 子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用原创 2017-06-26 07:24:08 · 583 阅读 · 0 评论 -
Python使用小技巧(持续更新)
合并两个列表(list)组成字典(dict)使用zip函数, 把key和value的list组合在一起, 再转成字典(dict)。keys = ['a', 'b', 'c']values = [1, 2, 3]dic = dict(zip(keys, values))print(dic)#打印结果{'a': 1, 'c': 3, 'b': 2}原创 2017-06-20 12:04:25 · 320 阅读 · 0 评论 -
Python爬虫-分析Ajax抓取今日头条街拍美图
AjaxAJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 传统的网页(不使用 AJAX)如果需要更新内容,必原创 2017-06-20 07:54:03 · 4848 阅读 · 1 评论 -
Python基础-定制类
定制类__str__看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。 __slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()函数。 除此之外,Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类。class Student(object): def _原创 2017-06-15 17:52:34 · 421 阅读 · 0 评论 -
Python基础-元类
type动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。 比方说我们要定义一个Hello的class,就写一个hello.py模块:class Hello(object): def hello(self, name='World'): print('Hello %s' % name)当Python解释器载入hello模块时,就会依次原创 2017-06-19 20:39:24 · 376 阅读 · 0 评论 -
Python基础-枚举
当我们需要定义常量的时候,有一个办法是使用大写变量通过整数来定义,例如月份:JAN = 1FEB = 2MAR = 3...NOV = 11DEC = 12好处是简单,缺点是类型是int,并且仍然是变量。 更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。 Python提供了Enum类来实现这个功能。 Enum可以把一组相关常量定义在一个原创 2017-06-19 20:17:14 · 439 阅读 · 0 评论 -
Django第一个web程序
暂时只能用命令行模式启动一个Django程序,后续继续学习 开发环境python3.6 pycharm创建Django项目命令行方式创建: django-admin startproject HelloDjango创建一个Django项目 使用命令: python manage.py startapp hello创建hello模块 此时一个Django创建成功接下来就可以运行查看效果原创 2017-06-03 12:04:57 · 342 阅读 · 0 评论 -
Django开发博客-(6)补充和总结
通过前5章内容,一个简易的博客就完成了,它具备基本的,发表博客、修改博客等。 接下来介绍一些其他内容。Django Shell他是一个Python交互式命令行程序,它自动引入项目环境,我们可以用它和我们的项目进行交互。 使用方式python manage.py shell 进入环境 然后我们可以查看一下当前Article的文章内容>>> from myblog.models import A原创 2017-06-06 15:19:47 · 295 阅读 · 0 评论 -
Django开发博客-(5)完善主页开发_2
接上一章继续。博客书写(编辑)页面编辑页面已经实现接下来是编辑响应的函数部分。 使用request.POST[‘参数名’]来获取表单数据 models.Article.objects.create(title, content)来创建对象具体实现如下。 首先增加一个html文件为edit_action.html 然后views增加一个响应,在这里我们选择编辑完成返回主页def edit_ac原创 2017-06-06 14:48:07 · 606 阅读 · 0 评论 -
Django开发博客-(5)完善主页开发_1
下面我们开始着手制作博客主页面的开发 首先分析一下一个博客具有哪些必要的东西: 页面包含:博客主页面博客文章页面博客书写(修改)页面下面分布进行讲解博客主页面博客主页面包括:文章标题列表,具有超链接功能可以发表新的博客标题列表编写思路:列出数据库的文章对象文章对象制作成列表,传递给前端显示前段页面把文章标题以超链接形式列出其中列出标题列表需要用到模板的for循环等等,这里介原创 2017-06-06 11:40:21 · 672 阅读 · 0 评论