随笔分类 -  Private Learn Python基础

摘要:<!--trackbacks-0--> <!--trackbacks-0--> flask源码解析之上下文 引入 对于flask而言,其请求过程与django有着截然不同的流程。在django中是将请求一步步封装最终传入视图函数的参数中,但是在flask中,视图函数中并没有请求参数,而是将请求通过上 阅读全文
posted @ 2019-02-28 19:38 qi.hu 阅读(281) 评论(0) 推荐(0)
摘要:一、守护线程 1. 对主进程来说,运行完毕指的是主进程代码运行完毕 2. 对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕 详解: 1、主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程 阅读全文
posted @ 2018-10-30 12:11 qi.hu 阅读(114) 评论(0) 推荐(0)
摘要:一、GIL - 全局解释器锁 有了GIL的存在,同一时刻同一进程中只有一个线程被执行;由于线程不能使用cpu多核,可以开多个进程实现线程的并发,因为每个进程都会含有一个线程,每个进程都有自己的GIL锁。 ① py文件产生了多个线程,到达解释器 ② 由于GIL锁问题,所以只能执行一个线程,先调用一个线 阅读全文
posted @ 2018-10-30 12:10 qi.hu 阅读(159) 评论(0) 推荐(0)
摘要:一、新式创建进程、线程池 from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor 1 1. concurrent.futures 提供了高度封装的异步调用接口 2 2. ThreadPoolExecutor 线程池 阅读全文
posted @ 2018-10-30 10:55 qi.hu 阅读(138) 评论(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 阅读(213) 评论(0) 推荐(0)
摘要:一、定义 如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手。为了解决这些问题,我们需要使用threading库中的Event对象。 事件的方法: 1 event = Event() # 默认状态为False 2 event.isSet() # 阅读全文
posted @ 2018-10-29 22:05 qi.hu 阅读(284) 评论(0) 推荐(0)
摘要:一、守护线程 1. 对主进程来说,运行完毕指的是主进程代码运行完毕 2. 对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕 详解: <1>主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进 阅读全文
posted @ 2018-10-26 19:56 qi.hu 阅读(181) 评论(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 阅读(200) 评论(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 阅读(172) 评论(0) 推荐(0)
摘要:一、什么是线程 1、定义 指的是一条流水线的工作过程,一个进程内至少自带一个线程,其实进程根本不能执行,进程不是执行单位,是分配资源的单位。线程是执行的单位。进程只是用来把资源集中到一起(进程只是一个资源单 位,或者说资源集合),而线程才是cpu上的执行单位。 我们的py文件在执行的时候,如果你站在 阅读全文
posted @ 2018-10-26 19:41 qi.hu 阅读(195) 评论(0) 推荐(0)
摘要:一、为什么引入进程池 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁进程(空间,变量,文件信息等等的内容)也需要消耗时间。第二即便开启了成千上万的进程,操作系统 阅读全文
posted @ 2018-10-25 18:00 qi.hu 阅读(201) 评论(0) 推荐(0)
摘要:一、引入 展望未来,基于消息传递的并发编程是大势所趋;即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合。通过消息队列交换数据。这样极大地减少了对使用锁定和其他同步手段的需求,还可以扩展到分布式系统中。 进程间应该尽量避免通信,即便需要通信,也应该选择进程安全的工具来避免加锁带来的问题,应该 阅读全文
posted @ 2018-10-25 17:58 qi.hu 阅读(217) 评论(0) 推荐(0)
摘要:一、创建管道的类 1、管道的基本参数 Pipe([duplex]):在进程之间创建一条管道,并返回元组(conn1,conn2),其中conn1,conn2表示管道两端的连接对象,强调一点:必须在产生Process对象之前产生管道 参数介绍: dumplex:默认管道是全双工的,如果将duplex射 阅读全文
posted @ 2018-10-25 17:57 qi.hu 阅读(234) 评论(0) 推荐(0)
摘要:一、生产者消费者模型 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入 阅读全文
posted @ 2018-10-25 17:55 qi.hu 阅读(183) 评论(0) 推荐(0)
摘要:一、定义 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的。队列就像一个特殊的列表,但是可以设置固定长度,并且从前面插入数据,从后面取出数据,先进先出。 格式定义: from multiprocessing i 阅读全文
posted @ 2018-10-25 17:53 qi.hu 阅读(162) 评论(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 阅读(161) 评论(0) 推荐(0)
摘要:一、定义 1、互斥锁同时只允许一个线程更改数据,而信号量Semaphore是同时允许一定数量的线程更改数据 。 假设商场里有4个迷你唱吧,所以同时可以进去4个人,如果来了第五个人就要在外面等待,等到有人出来才能再进去玩。 2、实现: 信号量同步基于内部计数器,每调用一次acquire(),计数器减1 阅读全文
posted @ 2018-10-25 17:49 qi.hu 阅读(129) 评论(0) 推荐(0)
摘要:一、定义 我们千方百计实现了程序的异步,让多个任务可以同时在几个进程中并发处理,他们之间的运行没有顺序,一旦开启也不受我们控制。尽管并发编程让我们能更加充分的利用IO资源,但是也给我们带来了新的问题:进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共 阅读全文
posted @ 2018-10-25 17:48 qi.hu 阅读(169) 评论(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 阅读(181) 评论(0) 推荐(0)
摘要:仔细说来,multiprocess不是一个模块而是python中一个操作、管理进程的包。 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块。由于提供的子模块非常多,为了方便大家归类记忆,我将这部分大致分为四个部分:创建进程部分,进程同步部分,进程池部 阅读全文
posted @ 2018-10-25 17:42 qi.hu 阅读(229) 评论(0) 推荐(0)