文章分类 -  4、python网络编程基础

摘要:一、前言 之前我们讲了select、poll、epoll的介绍,我们今天先来说说select的IO多路复用代码实现。我们先来根据之前图说说select的原理。 这边多说了,想了解更多:猛击这里 二、select的代码实现 Python的select()方法直接调用操作系统的IO接口,它监控socke 阅读全文
posted @ 2018-03-26 15:24 东郭仔 阅读(181) 评论(0) 推荐(0)
摘要:一、前言 select 负责监控和检测很多个socket连接,与下面这个内核态到用户态没什么关系,它只是说监控连接有一个连接,然后其中100个连接0k了,它就会返回。 二、IO多路复用 说明:IO多路复用中包括 select、pool、epoll,这些都属于同步,还不属于异步。 2.1、select 阅读全文
posted @ 2018-03-23 17:29 东郭仔 阅读(161) 评论(0) 推荐(0)
摘要:二 IO模式 刚才说了,对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段:1. 等待数据准备 (Waiting for the data to be ready)2. 阅读全文
posted @ 2018-03-23 15:55 东郭仔 阅读(91) 评论(0) 推荐(0)
摘要:一、前言 1、我们之前讲了IO操作什么时候切换回来呢? 我们刚刚讲了回调函数,这个回调函数是当你的程序一遇到IO操作,再一切换,这个切换的时候,切换之前你等着IO操作完了再回来。 2、IO 为什么不阻塞呐? 因为IO操作是用操作系统完成的,咋们用户读一个文件,你以为自己的程序打开一个文件,然后去把文 阅读全文
posted @ 2018-03-23 15:28 东郭仔 阅读(89) 评论(0) 推荐(0)
摘要:一、前言 通常,我们写服务器处理模型的程序时,有以下几种模型: 1、每收到一个请求,创建一个新的进程,来处理该请求: 2、每收到一个请求,创建一个新的线程,来处理该请求; 3、每收到一个请求,放入一个事件列表,让主进程通过非阻塞 I/O 的方式处理请求 上面的几种方式,各有千秋, 第1种方式,由于创 阅读全文
posted @ 2018-03-23 14:13 东郭仔 阅读(100) 评论(0) 推荐(0)
摘要:一、前言 刚刚只是在理论上讲述了gevent遇到io自动切换,下面我们就来实际操作一下,在实战过程中我们用协程大面积的爬虫,看看如何用gevent去实现并发的效果的。 二、串行爬网页 2.1、串行爬网页 说明:我们先来看看串行效果的爬网页的代码,看看消耗多长时间 2.2、gevent协程爬虫 说明: 阅读全文
posted @ 2018-03-23 11:57 东郭仔 阅读(128) 评论(0) 推荐(0)
摘要:一、概述 感觉确实用着比generator还简单了呢,但好像还没有解决一个问题,就是遇到IO操作,自动切换,对不对?所以我们接下来就说说如何遇到IO就切换,不得不提到一个模块Gevent。 Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是 阅读全文
posted @ 2018-03-23 11:28 东郭仔 阅读(109) 评论(0) 推荐(0)
摘要:一、概述 协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程。 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此: 协程能保留上一次调用时的状态(即所有局部状态的一 阅读全文
posted @ 2018-03-23 11:16 东郭仔 阅读(115) 评论(0) 推荐(0)
摘要:一、概述 本篇博客主要写进程锁,__name__ == "__main__"函数作用,以及进程池的使用。 二、进程同步 2.1、进程锁 说明:通过multiprocessing 中的Lock模块来实现进程锁。 1、这边不禁的有个疑问,就是进程中不是相互独立的吗?为啥还要加锁呐? 虽然每个进程都是独立 阅读全文
posted @ 2018-03-23 10:27 东郭仔 阅读(106) 评论(0) 推荐(0)
摘要:一、概述 之前我们讲述了进程之间的是通过进程中的Queue,来进行数据共享的,其实还有一种方式实现数据共享,那就是管道,pipe,以及数据共享manger。 二、数据通信 2.1、Pipe()函数 英文解释:The Pipe() function returns a pair of connecti 阅读全文
posted @ 2018-03-22 17:26 东郭仔 阅读(104) 评论(0) 推荐(0)
摘要:一、概述 我们知道不同进程之间内存是不能共享的,要想实现进程间的数据通讯,怎么搞呢,请看下面, 类似,中间需要有一个翻译,例如:一个英国人,一个中国人,需要有一个会说中文,又会说英语的人做翻译。 二、前戏 之前我们说了queue,这个是线程queue,它的主要目的是两个线程之间的数据,一个是生产者, 阅读全文
posted @ 2018-03-21 11:32 东郭仔 阅读(231) 评论(0) 推荐(0)
摘要:一、概述 之前我们了解的线程,接下来我们学习多进程,进程之间是相互独立的,python是启动进程的时候,是启动的是原生进程。进程是没有GIL锁的,而且不存在锁的概念,进程之间的数据是不能共享的,而线程是可以的。 英文解释如下: multiprocessing is a package that su 阅读全文
posted @ 2018-03-21 10:51 东郭仔 阅读(117) 评论(0) 推荐(0)
摘要:一、概述 queue is especially useful in threaded programming when information must be exchanged safely between multiple threads.(在多个线程之间安全的交换数据信息,队列在多线程编程中 阅读全文
posted @ 2018-03-19 17:11 东郭仔 阅读(121) 评论(0) 推荐(0)
摘要:一、概述 我们日常生活中经常遇到红绿灯,我们就很好理解红绿灯的例子,就是红灯停,绿灯行。 我现在生成一个线程,这个线程我让它扮演红绿灯,它每过一段时间就变成绿灯,又过一段时间变成红灯,又变成黄灯。然后我再生成3-5个线程作为车。车看见红灯,它就停下来等着,如果说是绿灯,车子就走。所以就涉及到红灯这个 阅读全文
posted @ 2018-03-19 15:22 东郭仔 阅读(173) 评论(0) 推荐(0)
摘要:一、概述 互斥锁 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去。 信号量:就是在同一时间,可以只允许设定的数执行,所以设置了信号量,就有多把锁。 二、信号量 说明:这个好比有3个 阅读全文
posted @ 2018-03-19 14:21 东郭仔 阅读(143) 评论(0) 推荐(0)
摘要:一、概述 我们今天来聊聊递归锁,到底什么是递归锁,为什么会存在? 二、递归锁 2.1、举例子说明 说明:比如你进学校去班级,结果进学校的时候有一道门,进班级的时候又有一道门,你首先进入学校要把第一道门打开,然后锁上。进入学校之后,你又要进班级的门,然后锁上。然后你出班级,就是要打开第二把锁,然后再出 阅读全文
posted @ 2018-03-19 14:02 东郭仔 阅读(717) 评论(0) 推荐(0)
摘要:一、概述 线程需要沟通,需要共享数据,但是我们之前并没有涉及到多线程情况共享数据的例子。下面我们就来探讨一下,多线程共享数据会出现什么情况。这边就需要用到线程锁,又叫互斥锁(mutex)。 二、线程锁(互斥锁) 2.1、前戏 说明:我们现在来探讨多线程数据共享的情况 这个时候有些小伙伴就说了,你最后 阅读全文
posted @ 2018-03-19 11:13 东郭仔 阅读(250) 评论(0) 推荐(0)
摘要:一、前言 我的机器有4核,代表着同一时间,可以干4个任务。如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让我看上去是并发的。但是单核永远肯定时串行的,它肯定是串行的,cpu真正执行的时候,因为一会执行1,一会执行2.。。。。正常的线程就是这个样子的。 但是,在p 阅读全文
posted @ 2018-03-19 10:37 东郭仔 阅读(259) 评论(0) 推荐(0)
摘要:一、概述 我们说在不加join的时候,主线程和子线程完全是并行的,没有了依赖关系,你主线程执行了,我子线程也执行了。但是加了join之后,主线程依赖子线程执行完毕才往下走。现在我们要把所有的子线程编程我的守护进程。 守护进程:说白了,你是主人,你搞了几个仆人,这些个仆人都是为你服务的。可以帮你做很多 阅读全文
posted @ 2018-03-19 10:25 东郭仔 阅读(165) 评论(0) 推荐(0)
摘要:一、前言 之前,我们只是简单的介绍了多线程演示,也通过时间设置看出来了,多线程和单线程的不同。现在我们进行更深入的了解,来聊一聊,另外一种多线程方式,继承式多线程,和一个多线程的等待。 二、继承式多线程 2.1、定义 说明:继承式多线程是自己定义类,取继承theading.Tread这个类,通过启动 阅读全文
posted @ 2018-03-16 17:30 东郭仔 阅读(108) 评论(0) 推荐(0)