10 2018 档案

摘要:一、守护线程 1. 对主进程来说,运行完毕指的是主进程代码运行完毕 2. 对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕 详解: 1、主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程 阅读全文
posted @ 2018-10-30 12:11 qi.hu 阅读(105) 评论(0) 推荐(0) 编辑
摘要:一、GIL - 全局解释器锁 有了GIL的存在,同一时刻同一进程中只有一个线程被执行;由于线程不能使用cpu多核,可以开多个进程实现线程的并发,因为每个进程都会含有一个线程,每个进程都有自己的GIL锁。 ① py文件产生了多个线程,到达解释器 ② 由于GIL锁问题,所以只能执行一个线程,先调用一个线 阅读全文
posted @ 2018-10-30 12:10 qi.hu 阅读(142) 评论(0) 推荐(0) 编辑
摘要:一、新式创建进程、线程池 from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor 1 1. concurrent.futures 提供了高度封装的异步调用接口 2 2. ThreadPoolExecutor 线程池 阅读全文
posted @ 2018-10-30 10:55 qi.hu 阅读(129) 评论(0) 推荐(0) 编辑
摘要:一、队列 这三种队列都是线程安全的,不会出现多个线程抢占同一个资源或数据的情况 1 import queue #不需要通过threading模块里面导入,直接import queue就可以了,这是python自带的 2 q=queue.Queue() 3 q.put('first') 4 q.put 阅读全文
posted @ 2018-10-30 10:51 qi.hu 阅读(206) 评论(0) 推荐(0) 编辑
摘要:一、定义 如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手。为了解决这些问题,我们需要使用threading库中的Event对象。 事件的方法: 1 event = Event() # 默认状态为False 2 event.isSet() # 阅读全文
posted @ 2018-10-29 22:05 qi.hu 阅读(271) 评论(0) 推荐(0) 编辑
摘要:一、守护线程 1. 对主进程来说,运行完毕指的是主进程代码运行完毕 2. 对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕 详解: <1>主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进 阅读全文
posted @ 2018-10-26 19:56 qi.hu 阅读(171) 评论(0) 推荐(0) 编辑
摘要:一、数据共享 多个线程内部有自己的数据栈,数据不共享;全局变量在多个线程之间是共享的。 1 # 线程数据共享不安全加锁 2 3 import time 4 from threading import Thread, Lock 5 6 7 num = 100 8 9 def func(t_lock): 阅读全文
posted @ 2018-10-26 19:51 qi.hu 阅读(189) 评论(0) 推荐(0) 编辑
摘要:一、Threading模块 1、线程的创建 - 方式一 1 from threading import Thread 2 import time 3 4 def sayhi(name): 5 time.sleep(2) 6 print('%s say hello' % name) 7 8 if __ 阅读全文
posted @ 2018-10-26 19:43 qi.hu 阅读(167) 评论(0) 推荐(0) 编辑
摘要:一、什么是线程 1、定义 指的是一条流水线的工作过程,一个进程内至少自带一个线程,其实进程根本不能执行,进程不是执行单位,是分配资源的单位。线程是执行的单位。进程只是用来把资源集中到一起(进程只是一个资源单 位,或者说资源集合),而线程才是cpu上的执行单位。 我们的py文件在执行的时候,如果你站在 阅读全文
posted @ 2018-10-26 19:41 qi.hu 阅读(180) 评论(0) 推荐(0) 编辑
摘要:一、为什么引入进程池 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁进程(空间,变量,文件信息等等的内容)也需要消耗时间。第二即便开启了成千上万的进程,操作系统 阅读全文
posted @ 2018-10-25 18:00 qi.hu 阅读(188) 评论(0) 推荐(0) 编辑
摘要:一、引入 展望未来,基于消息传递的并发编程是大势所趋;即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合。通过消息队列交换数据。这样极大地减少了对使用锁定和其他同步手段的需求,还可以扩展到分布式系统中。 进程间应该尽量避免通信,即便需要通信,也应该选择进程安全的工具来避免加锁带来的问题,应该 阅读全文
posted @ 2018-10-25 17:58 qi.hu 阅读(206) 评论(0) 推荐(0) 编辑
摘要:一、创建管道的类 1、管道的基本参数 Pipe([duplex]):在进程之间创建一条管道,并返回元组(conn1,conn2),其中conn1,conn2表示管道两端的连接对象,强调一点:必须在产生Process对象之前产生管道 参数介绍: dumplex:默认管道是全双工的,如果将duplex射 阅读全文
posted @ 2018-10-25 17:57 qi.hu 阅读(219) 评论(0) 推荐(0) 编辑
摘要:一、生产者消费者模型 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入 阅读全文
posted @ 2018-10-25 17:55 qi.hu 阅读(157) 评论(0) 推荐(0) 编辑
摘要:一、定义 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的。队列就像一个特殊的列表,但是可以设置固定长度,并且从前面插入数据,从后面取出数据,先进先出。 格式定义: from multiprocessing i 阅读全文
posted @ 2018-10-25 17:53 qi.hu 阅读(146) 评论(0) 推荐(1) 编辑
摘要:一、基本定义 事件默认值为False event = Event() #设置一个事件实例 event.set() #设置标志位,将e事件的状态改为True event.clear() #清空标志位,将e事件的状态改为False event.wait() #等待设置标志位 二、信号灯实例 1 impo 阅读全文
posted @ 2018-10-25 17:50 qi.hu 阅读(155) 评论(0) 推荐(0) 编辑
摘要:一、定义 1、互斥锁同时只允许一个线程更改数据,而信号量Semaphore是同时允许一定数量的线程更改数据 。 假设商场里有4个迷你唱吧,所以同时可以进去4个人,如果来了第五个人就要在外面等待,等到有人出来才能再进去玩。 2、实现: 信号量同步基于内部计数器,每调用一次acquire(),计数器减1 阅读全文
posted @ 2018-10-25 17:49 qi.hu 阅读(116) 评论(0) 推荐(0) 编辑
摘要:一、定义 我们千方百计实现了程序的异步,让多个任务可以同时在几个进程中并发处理,他们之间的运行没有顺序,一旦开启也不受我们控制。尽管并发编程让我们能更加充分的利用IO资源,但是也给我们带来了新的问题:进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共 阅读全文
posted @ 2018-10-25 17:48 qi.hu 阅读(146) 评论(0) 推荐(0) 编辑
摘要:一、创建进程的第二种方法 1 # 创建进程的第二种方式 2 import os 3 import time 4 from multiprocessing import Process 5 6 class My_process(Process): # 继承Process方法,重写run方法,传参数的时 阅读全文
posted @ 2018-10-25 17:45 qi.hu 阅读(175) 评论(0) 推荐(0) 编辑
摘要:仔细说来,multiprocess不是一个模块而是python中一个操作、管理进程的包。 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块。由于提供的子模块非常多,为了方便大家归类记忆,我将这部分大致分为四个部分:创建进程部分,进程同步部分,进程池部 阅读全文
posted @ 2018-10-25 17:42 qi.hu 阅读(210) 评论(0) 推荐(0) 编辑
摘要:一、进程状态介绍 在了解其他概念之前,我们首先要了解进程的几个状态。在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。 (1)就绪(Ready)状态 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。 (2)执行 阅读全文
posted @ 2018-10-25 17:38 qi.hu 阅读(125) 评论(0) 推荐(0) 编辑
摘要:一、并发 无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务。 并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发,(并行也属于并发) 二、并行 并行:并行:同时运 阅读全文
posted @ 2018-10-25 17:36 qi.hu 阅读(141) 评论(0) 推荐(0) 编辑
摘要:一、进程 1、定义 具有独立功能的程序在某个数据集合上的一次运行活动,也是操作系统进行资源分配和保护的基本单位。 python文件中写了一些代码,这叫做程序,运行这个python文件的时候,这叫做进程。 补充:每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的 阅读全文
posted @ 2018-10-25 17:35 qi.hu 阅读(155) 评论(0) 推荐(0) 编辑
摘要:一、操作系统 1、定义:精简的说的话,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。 操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成, 阅读全文
posted @ 2018-10-25 17:33 qi.hu 阅读(321) 评论(0) 推荐(0) 编辑
摘要:一、struct 1、简述 我们可以借助一个模块,这个模块可以把要发送的数据长度转换成固定长度的字节。这样客户端每次接收消息之前只要先接受这个固定长度字节的内容看一看接下来要接收的信息大小,那么最终接受的数据只要达到这个值就停止,就能刚好不多不少的接收完整的数据了。 该模块可以把一个类型,如数字,转 阅读全文
posted @ 2018-10-24 21:30 qi.hu 阅读(321) 评论(0) 推荐(0) 编辑
摘要:一、socketserver socketserver可以实现和多个客户端通信。它是在socket的基础上进行了一层封装,也就是说底层还是调用的socket,在py2.7里面叫做SocketServer也就是大写了两个S,在py3里面就小写了。 1 import socketserver #1、引入 阅读全文
posted @ 2018-10-24 21:27 qi.hu 阅读(186) 评论(0) 推荐(0) 编辑
摘要:一、黏包成因 TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。 收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数 阅读全文
posted @ 2018-10-24 21:25 qi.hu 阅读(425) 评论(0) 推荐(0) 编辑
摘要:一、传输层 1、定义 IP首部有一个协议字段,用来标识网络层(IP)的上一层所采用的是哪一种传输层协议。根据这个字段的协议号,就可以识别IP传输的数据部分究竟是TCP的内容还是UDP的内容。 同样,传输层的TCP( 6 )和UDP( 17 ),为了识别自己所传输的数据部分究竟应该发给哪个应用,也设定 阅读全文
posted @ 2018-10-24 21:19 qi.hu 阅读(196) 评论(0) 推荐(0) 编辑
摘要:一、C/S B/S 架构 1、定义 (1)C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多 以此作为首选设计标准。 (2)B/S结构 阅读全文
posted @ 2018-10-15 17:29 qi.hu 阅读(245) 评论(0) 推荐(0) 编辑
摘要:一、re模块的核心功能 1、findall —— 查找所有,返回list 1 lst = re.findall("m", "mai le fo len, mai ni mei!") 2 print(lst) # ['m', 'm', 'm'] 3 lst = re.findall(r"\d+", " 阅读全文
posted @ 2018-10-15 17:24 qi.hu 阅读(146) 评论(0) 推荐(0) 编辑
摘要:一、定义 正则表达式是对字符串操作的一种逻辑公式,一般使用正则表达式对字符串进行匹配和过滤。 优点:灵活、功能性强,逻辑性强。 http://tool.chinaz.com/regex/ #在线测试工具 正则表达式由普通字符和元字符组成。普通字符——大小写字母、数字。 二、元字符 1、字符组 字符组 阅读全文
posted @ 2018-10-15 17:17 qi.hu 阅读(506) 评论(0) 推荐(0) 编辑
摘要:一、序列化 存储数据或者传输数据时,需要把对象进行处理,把对象处理成方便存储和传输的数据格式。不同的序列化,结果也不同。 序列化方式: (1) pickle 可以将我们python中的任意数据类型转化为bytes并写入文件中,同样也可以把文件中写好的bytes转换回我们python的数据. 这个过程 阅读全文
posted @ 2018-10-15 17:00 qi.hu 阅读(252) 评论(0) 推荐(0) 编辑
摘要:一、定义 1、Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块能定义函数,类和变量,模块里也能包含可执行的代码。 模块导入的方式:(1) import 模块 (2) from xxx import 模块 1 im 阅读全文
posted @ 2018-10-09 08:37 qi.hu 阅读(136) 评论(0) 推荐(0) 编辑
摘要:一、类的约束 要约束程序的结构,再分配任务时要把功能定义好,然后交给 程序员分别完成相应的功能。 1、提取父类 -- 然后在父类中定义好方法. 在这个方法中什么都不用干. 就抛一个异常就可以了. 这样所有的子类都必须重写这个方法. 否则访问的时候就会报错 第一种解决方案: 首先, 提取一个父类. 在 阅读全文
posted @ 2018-10-09 08:22 qi.hu 阅读(159) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示