12 2017 档案
摘要:多线程的控制方式 目录 1 唤醒单个线程等待 Condition类相当于一把高级的锁,可以进行一些复杂的线程同步控制。一般Condition内部都有一把内置的锁对象(默认为RLock),对于Condition的使用主要有以下步骤: 上面的代码中,首先导入所需的模块,生成Condition的实例,之后
阅读全文
摘要:锁与信号量 目录 1 添加线程锁 由于多线程对资源的抢占顺序不同,可能会产生冲突,通过添加线程锁来对共有资源进行控制。 第 1-4 行,首先导入需要的模块,atexit用于设置退出脚本时的处理函数,random用于产生随机数来增加线程的不确定性。 第 7- 12 行,定义一个新的集合类,用于输出当前
阅读全文
摘要:多线程的建立与使用 目录 1 生成线程的三种方法 三种方式分别为: # There are three ways to create a thread # The first is create a thread instance, and pass a function # The second
阅读全文
摘要:threading模块 / threading Module 1 常量 / Constants Pass 2 函数 / Function 2.1 setprofile()函数 函数调用: threading.setprofile(func) 函数功能:为所有线程设置一个profile函数 传入参数:
阅读全文
摘要:基本概念 / Basic Concept 快速跳转 0 简介与动机 / Why Multi-Thread/Multi-Process/Coroutine 在多线程(multithreaded, MT)编程出现之前,计算机程序的执行是由单个步骤序列组成的,该序列在主机的CPU中按照同步顺序执行。即无论
阅读全文
摘要:Modbus协议 / Modbus Protocol 目录 1 Modbus 协议简介 Modbus协议MODICON公司1979年开发的一种通信协议,是一种工业现场总线协议标准,1996年施耐德公司推出了基于以太网TCP/IP的Modbus协议—ModbusTCP。 Modbus协议是一项应用层报
阅读全文
摘要:BOOTP-TFTP-FTP 目录 1 文件传输流程 / File Transfer Flow 利用BOOTP,TFTP,FTP三种传输协议,建立起客户端和服务器,实现一个简单的文件传输流程。 Note: 三种传输协议的实现过程可参考文末的相关阅读,部分内容如文件路径和文件名等均为硬编码,后续可做修
阅读全文
摘要:DHCP实现 / DHCP Implement 目录 下面介绍建立一个简单的DHCP服务器,主要用于对基本的DHCP请求进行响应,目前只提供一个IP为客户端使用,实现最基本的通信示例。理论内容可参考 DHCP 理论部分。 1 DHCP 服务器建立过程 首先是基本服务器的建立,这个服务器实现了最基本的
阅读全文
摘要:DHCP协议 / DHCP Protocol 目录 1 DHCP 基本理论 DHCP (Dynamic Host Configuration Protocol, 动态主机配置协议) 是一种局域网的网络协议,使用UDP协议进行工作,主要有两个用途,在RFC 2131中有详细的描述, 1. 给内部网络或
阅读全文
摘要:BOOTP实现 / BOOTP Implement 目录 Note: 理论部分请参考文末相关阅读链接 1 BOOTP 的服务器建立过程 服务器建立步骤主要有: (1) 设定服务器IP,传送ip(offer_ip),服务端口68,客户端口67; (2) 建立send_socket/UDP,广播模式允许
阅读全文
摘要:BOOTP协议 / BOOTP Protocol 目录 1. 基本理论 / Basic Theory BOOTP(Bootstrap Protocol)是一种引导协议,基于RFC951协议,基于UDP协议,也称为自举协议,是DHCP协议的前身。BOOTP用于无盘工作站(类似网吧无盘结构)的局域网中,
阅读全文
摘要:TFTP实现 / TFTP Implement 目录 1 TFTP 的服务器建立过程 服务器建立步骤主要有: (1) 设定服务器IP和端口号(常用69),建立socket并bind地址; (2) 设定服务器工作目录; (3) 建立主循环进行监听,根据收到的信息选择读/写模式; (4) (建立新的线程
阅读全文
摘要:TFTP 的基本理论 目录 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是UDP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69,基于RFC1350协议。 1 通信流程 / Communica
阅读全文
摘要:使用 ftplib 建立 FTP 客户端 用于建立FTP Client,与 pyftplib 建立的 Server 进行通信。 快速导航 1. 模块信息 2. 建立 FTP 客户端 1. 模块信息 1.1 常量 / Constants FTP_PORT = 21 标准的FTP协议服务端端口 1.2
阅读全文
摘要:使用 pyftplib 建立 FTP 服务器 pyftplib 主要用于建立 FTP Server,与 ftplib 建立的 Client 进行通信。 快速导航 1. 模块信息 2. 建立 FTP 服务器 1 模块信息 1.1 servers模块 用于建立服务器 1.1.1 FTPServer()类
阅读全文
摘要:FTP协议 / FTP Protocol FTP全称为File Transfer Protocol(文件传输协议),常用于Internet上控制文件的双向传输,常用的操作有上传和下载。基于TCP/IP,基于RFC959通信协议。 0 FTP理论 / FTP Theory 详细的理论可以参考这里。 1
阅读全文
摘要:Socket 目录 1 socket的TCP/IP通信基本建立过程 socket的TCP/IP通信连接主要包括两个部分,服务端与客户端 1.1 Socket server服务端建立 服务端建立步骤主要有: 1.2 Socket client客户端建立 客户端建立步骤主要有: 2 socket的UDP
阅读全文
摘要:socket 1. 常量 / Constants AF_* 和 SOCK_* 分别属于 AddressFamily 和 SocketType 1.1 AF_*类常量 socket.AF_UNIX: UNIX本地通信使用 socket.AF_INET: IPv4连接时使用 socket.AF_INET
阅读全文
摘要:Socket socket 简述 / socket Abstract 网络进程通信与 socket 网络中进程之间如何通信,首要解决的问题是如何唯一标识一个进程,否则通信无从谈起。在本地可以通过进程 PID 来唯一标识一个进程,但是在网络中这是行不通的。其实 TCP/IP 协议族已经帮我们解决了这个
阅读全文
摘要:pdb / ipdb 模块 / pdb / ipdb Module pdb 和 ipdb 的主要作用是用于 Python 程序的单步调试,Python 的调试可参考链接。 下面是一个简单的使用示例 运行代码后便可以进行单步调试,只要输入指令即可 Note: 1. 请尽量避免使用 Python 自带的
阅读全文
摘要:binascii模块 / binascii Module binascii模块包含很多在二进制和 ASCII 编码的二进制表示之间的转换方法。关于进制转换可以参考一些内置函数。 hexlify 与 unhexlify 上面的函数 hexlify 和 b2a_hex 实际上是一个函数,推荐使用 hex
阅读全文
摘要:abc模块 / abc Module 在定义抽象方法时,为了在初始化阶段就检测是否对抽象方法进行了重定义,Python 提供了 abc 模块。 第 4 行:生成一个抽象的基类 MyABC,这其中利用了 metaclass 元类的相关用法 第 6-7 行:抽象方法及装饰器,抽象方法可以不执行任何程序,
阅读全文
摘要:struct模块 / struct Module 在网络编程中,利用 socket 进行通信时,常常会用到 struct 模块,在网络通信中,大多数传递的数据以二进制流(binary data)存在。传递字符串时无需过多担心,但传递 int,char 之类的基本数据时,就需要一种机制将某些特定的结构
阅读全文
摘要:wmi模块 / wmi Module WMI (Windows Management Instrumentation) 模块可用于获取 Windows 内部信息。该模块需要 win32com 的支持,环境安装如下, 模块信息 WMI() 类 类实例化:w = wmi.WMI() 类的功能: 用于生成
阅读全文
摘要:装饰器 / Decorator 目录 1 关于闭包 / About Closure 装饰器其本质是一个闭包函数,为此首先理解闭包的含义。 闭包(Closure),又称词法闭包(Lexical Closure)或函数闭包(Function Closures),是引用了自由变量的函数。这个被引用的自由变
阅读全文
摘要:生成器 / Generator 目录 1 关于生成器 从计算机科学角度上看,生成器是一种类协程或半协程(Semi-coroutine),生成器提供了一种可以通过特定语句或方法来使生成器的执行对象(Execution)暂停,而这语句一般都是 yield。通过 yield 语句将每一次的结果切出执行对象
阅读全文
摘要:迭代器 / Iteratior 目录 1 可迭代对象与迭代器协议 对于迭代器首先需要了解两个定义,迭代器协议 (Iterator Protocol) 与可迭代对象 (Iterable) , 迭代器协议 Iterator Protocol: 迭代器协议是指对象能够提供 next() 方法 (__nex
阅读全文
摘要:builtins 内建模块 / builtins Module 在Python的模块中,有一种特殊模块,无需导入便可以使用,其中包含了许多内建函数与类。 builtins 模块内容 / builtins Content 通过对 builtins 模块的导入(也可使用 __builtins__ 代替)
阅读全文
摘要:匿名函数 / Anonymous Function 匿名函数是一种不需要绑定函数名的函数 (i.e. functions that are not bound to a name)。匿名函数通过 lambda 表达式进行构建。常用于快速建立起一个(一次性的)函数。 Note: lambda 是 Py
阅读全文
摘要:内建函数 / Built-in Function or Method Python中有许多的内建函数(查看内建模块部分),此处将对内建函数进行介绍 内建函数 ord / built-in function ord Python 的内置函数 ord 作用是将一个 ASCII 码表中的单个字符转换成对应
阅读全文
摘要:函数与方法的区别 / Distinction of Function and Method 关于函数与方法的区别,可根据两者的定义看出, 函数function -- A series of statements which returns some value to a caller. It can
阅读全文
摘要:内建类map / Built-in Type map 关于内建类 map 是一个内建的类,能够返回一个 map 的 obj。map 的第一个参数为一个可执行函数,后续参数均为可迭代对象,map 会分别迭代后续参数并传给可执行函数,并将结果保存。 上面的代码输出结果为 Note: 在 Python2
阅读全文
摘要:内建类 bytes 和 bytearray / Built-in Type bytes and bytearray 关于内建类 Python的内建类 bytes 主要有以下几点: class bytes([source[, encoding[, errors]]]) Return a new “by
阅读全文
摘要:LEGB法则 / LEGB Rule LEGB 变量搜索顺序 来源于《Python学习手册》/ Learning Python Page 419 Python 的变量名解析机制称为 LEGB 法则。 L – Local: 本地作用域; E – Enclosing: 上一层结构中 def 或 lamb
阅读全文
摘要:变量类型 / Variable Type 在 Python 中,变量主要有以下几种,即全局变量,局部变量和内建变量, 全局变量 / Global Variable 通常定义于模块内部,大写变量名形式存在,可被其他模块导入,但还有一种特殊的私有变量,以单/双下划线开头,同样定义于模块内,但无法通过 f
阅读全文
摘要:内建类 super / Built-in Type super 关于内建类 对于 super 可以从官方文档中看到基本介绍,super 接收一个类,以及类或类的实例,最终返回一个代理对象的实例。而 MRO 搜索也将被用在 super(同 getattr)上,因此 super 调用的不一定是父类的方法
阅读全文
摘要:内建类与内建函数的区分 / Distinction of Built-in Type and Function 对于 Python,有许多可以不需要定义或引用就可以使用的函数(类)(参考内建模块),诸如 abs, sum 等计算函数,以及 chr, bin, hex 等类型转换函数 (参考内建函数)
阅读全文
摘要:方法解析顺序 / MRO (Method Resolution Order) 关于方法解析顺序(MRO)的详细内容可以参考文末链接,这里主要对 MRO 进行简要的总结说明以及一些练习示例。 经典类和新式类的 MRO 经典类 描述: 一种不能继承的类,如果经典类为父类,其子类调用父类的构造函数时会报错
阅读全文
摘要:基类与继承 / Base Class and Inheritance Class 面向对象的特性使得 Python 中不可避免地需要使用到类和类的继承,类的继承可以使得代码很好的被重用。下面以一些代码示例说明类的继承如何使用。 继承一个基类 首先,定义一个基类 Animal,在初始化中设定一个基本属
阅读全文
摘要:类的特殊属性 / Special Property of Class Python 中通过 class 进行类的定义,类可以实例化成实例并利用实例对方法进行调用。 类中还包含的一些共有的特殊属性。 特殊类属性 含义 __name__ 类的名字(字符串) __doc__ 类的文档字符串 __bases
阅读全文
摘要:__call__ 方法 __call__ 是当对象被调用时会调用的方法,允许一个对象(类的实例等)像函数一样被调用,也可以传入参数。 上面的代码中首先定义了一个 Foo 类,然后定义了 __call__ 方法,此时,这个类所生成的实例便可以像函数一样被调用了。 运行代码输出以下结果, 从第 9 行和
阅读全文
摘要:__getattr__ 方法 __getattr__ 方法当对象调用内部属性(包括方法等)且未找到对应属性的时候会调用的特殊方法。利用这一特性,可是对函数实现一个代理模式。 __getattr__方法实现代理模式 当有一个类中已完成了许多函数的定义,而另外一个类要调用这些函数时,最直接的方法是使用代
阅读全文
摘要:魔术方法 / Magic Method 魔法方法就是可以给你的类增加魔力的特殊方法(实质应称为特殊方法,魔术方法在JavaScript中有所体现,对象具有不透明特性,而且无法在自定义对象中模拟这些行为),如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所
阅读全文
摘要:静态方法、类方法和属性方法 在 Python 中有三种常用的方法装饰器,可以使普通的类实例方法变成带有特殊功能的方法,分别是静态方法、类方法和属性方法。 静态方法 / Static Method 在 def 定义之前加上 @staticmethod 进行装饰,便可以使该方法成为静态方法,静态方法无法
阅读全文
摘要:类实例方法、私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- 抽象方法。 类实例方法 / Instance Method 类实例方法通过关键字 def 进行定义
阅读全文
摘要:类属性、实例属性和私有属性 Python中类的属性主要包括类属性,实例属性和私有属性,下面是对三种属性的简单介绍 类属性 / Class Property 类属性在__init__()之外初始化,在外部可以通过类,类实例进行调用, 在内部可以通过类进行调用。 在定义属性的过程中,尽量将各个实例共有的
阅读全文