摘要: 协程:是单线程下的并发,又称微线程,纤程。 英文名Coroutine。 一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。 阅读全文
posted @ 2018-05-24 20:15 铁乐猫 阅读(179) 评论(0) 推荐(0) 编辑
摘要: concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor: 进程池,提供异步调用 阅读全文
posted @ 2018-05-23 19:57 铁乐猫 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 信号量 semaphore 允许统一时刻n个线程执行这段代码 事件 event 有一个内部的事件来控制wait的行为且控制的是所有的线程 条件 condition 有一个内部的条件来控制wait的行为,可以逐个或者分批次的控制线程的走向 阅读全文
posted @ 2018-05-23 18:12 铁乐猫 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 加锁会让运行变成串行,而在start之后立即使用join,不用加锁了也是串行的效果。那么为什么使用加锁呢? 在start之后立刻使用jion,也会将100个任务的执行变成串行,最终n的结果是0,也是安全的, 但问题是start后立即join:任务内的所有代码都是串行执行的, 而加锁,只是加锁的部分即修改共享数据的部分是串行的, 单从保证数据安全方面,二者都可以实现,但很明显是加锁的效率更高. 阅读全文
posted @ 2018-05-23 17:57 铁乐猫 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 什么是 HTML? * HTML 超文本标记语言的缩写(**H**yper **T**ext **M**arkup **L**anguage) * HTML 并不是编程语言,而是一种标记语言(markup language) * 标记 <英文单词或者字母>称为标记,一个HTML页面都是由各种标记组成。 * 标记语言 一套**标记标签**(markup tag) * 标记语言 和编程语言有一个编译过程不一样,它是直接将HTML页面交由浏览器解析执行的。 * HTML 使用标记标签来描述网页,用于描述超文本内容的显示方式,如字体,颜色,大小等。 * 超文本 音频,视频,图片等视为超文本。 * 这些标记标签在浏览器解析完展示给用户看的时候是不会出现在页面的。 阅读全文
posted @ 2018-05-21 20:02 铁乐猫 阅读(767) 评论(0) 推荐(0) 编辑
摘要: 线程的出现   60年代,在OS中能拥有资源和独立运行的基本单位是进程,然而随着计算机技术的发展,进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大。   因此在80年代,出现了能独立运行的基本单位——线程(Threads)。   注意:进程是资源分配的最小单位,线程是CPU调度的最小单位.   每一个进程中至少有一个线程。 阅读全文
posted @ 2018-05-18 21:24 铁乐猫 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 锁 —— multiprocess.Lock (进程同步) 之前我们千方百计实现了程序的异步,让多个任务可以同时在几个进程中并发处理, 但是它们之间的运行没有顺序,一旦开启也不受我们控制。 尽管并发编程能让我们更加充分的利用IO资源,但是也会带来新的问题。 当多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题。 遇到数据、安全比速度重要的场景,我们就需要将进程变回受同步控制。 阅读全文
posted @ 2018-05-15 21:03 铁乐猫 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 进程之间的数据共享 基于消息传递的并发编程是大势所趋, 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据。 这样极大地减少了对使用锁和其他同步手段的需求,还可以扩展到分布式系统中。 但进程间应该尽量避免通信,即便需要通信,也应该选择进程安全的工具来避免加锁带来的问题。 以后我们会尝试使用数据库来解决现在进程之间的数据共享问题。 阅读全文
posted @ 2018-05-15 21:01 铁乐猫 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 【进程】 运行中的程序就是一个进程。 所有的进程都是通过它的父进程来创建的。 因此,运行起来的python程序也是一个进程,那么我们也可以在程序中再创建进程。 多个进程可以实现并发效果,程序中存在多个进程的时候,在某些时候,就会让程序的执行速度变快。 以之前所学的知识,并不能实现创建进程这个功能,所以就需要借助到python中强大的模块--multiprocess。 阅读全文
posted @ 2018-05-14 20:14 铁乐猫 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 验证客户端链接的合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂, 那么可以利用hmac+加盐的方式来实现。 SocketServer是标准库中的一个高级模块(python3.x中重命名为socketserver), 它的目标是简化很多样板代码,它们是创建网络客户端和服务器所必需的代码。 阅读全文
posted @ 2018-05-11 09:14 铁乐猫 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 套接字 套接字是计算机网络数据结构,它体现了C/S结构中"通信端点"的概念。 在任何类型的通信开始之前,网络应用程序必須创建套接字。 可以将它们比作成电话插孔,没有它将无法进行通信。 套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信。 这就是所谓的进程间通信(Inter Process Communication, IPC)。 有两种类型的套接字:基于文件的和面向网络的。 阅读全文
posted @ 2018-05-10 20:44 铁乐猫 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。 在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面, 对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 其实站在你的角度上看,socket就是一个模块。 我们通过调用模块中已经实现的方法建立两个进程之间的连接和通信。 也有人将socket说成ip+port, 因为ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序。 所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块来与之通信。 阅读全文
posted @ 2018-05-07 17:59 铁乐猫 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 包是一种通过使用‘.模块名’来组织python模块名称空间的方式。 1. 无论是import形式还是from...import形式, 凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法。 2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)。 3. import导入文件时,产生名称空间中的名字来源于文件,import 包, 产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件。 阅读全文
posted @ 2018-04-28 22:11 铁乐猫 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。 但其实import加载的模块分为四个通用类别:    1 使用python编写的代码(.py文件)   2 已被编译为共享库或DLL的C或C++扩展   3 包好一组模块的包   4 使用C编写并链接到python解释器的内置模块 阅读全文
posted @ 2018-04-27 22:45 铁乐猫 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 在内置数据类型(dict、list、set、tuple)的基础上, collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。 1.namedtuple: 生成可以使用名字来访问元素内容的tuple; 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象; 3.Counter: 计数器,主要用来计数; 4.OrderedDict: 有序字典; 5.defaultdict: 带有默认值的字典。 阅读全文
posted @ 2018-04-24 22:02 铁乐猫 阅读(195) 评论(0) 推荐(0) 编辑