2018年12月18日

Process类,Thread类,Pool类,gevent类,ProcessPoolExecutor,ThreadPoolExecutor的用法比较

摘要: 一 Process类 multiprocessing模块下的一个类 创建子进程。 有两种方法 方法一 输出: 方法二 输出: 二 Thread类 threading模块下的类 创建线程 有两种方法 与Process类一样。 三 Pool类 Pool类的方法: p=Pool() p.apply_asy 阅读全文

posted @ 2018-12-18 18:10 ExplorerMan 阅读(554) 评论(0) 推荐(0)

python并发之concurrent.futures

摘要: concurrent:并发 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码。从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolEx 阅读全文

posted @ 2018-12-18 18:07 ExplorerMan 阅读(292) 评论(0) 推荐(0)

单线程实现并发——协程,gevent模块

摘要: 一 并发的本质 1 切换 2 保存状态 二 协程的概念 协程,又称微线程,纤程。英文名Coroutine。单线程下实现并发,用户从应用程序级别控制单线程下任务的切换,注意一定是遇到I/O才切。 协程的特点在于是一个线程执行,那和多线程比,协程有何优势? 最大的优势就是协程极高的执行效率。因为子程序切 阅读全文

posted @ 2018-12-18 18:07 ExplorerMan 阅读(278) 评论(0) 推荐(0)

Twisted 简介

摘要: Twisted是用Python实现的基于事件驱动的网络引擎框架,Twisted支持许多常见的传输及应用层协议,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。就像Python一样,Twisted也具有“内置电池”(batteries-included)的特点。Twi 阅读全文

posted @ 2018-12-18 18:05 ExplorerMan 阅读(340) 评论(0) 推荐(0)

Python进程、线程、协程的对比

摘要: 1. 执行过程 每个线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在进程中,由进程提供多个线程执行控制。每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。 协程,又称微线程,Coroutine。执行过程 阅读全文

posted @ 2018-12-18 18:04 ExplorerMan 阅读(540) 评论(0) 推荐(0)

协程的优点(Python)

摘要: 协程的优点: 协程是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间, 而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态。协程的执行效率非常高。因为子程序切换不是线程切换,而是由程序自身控制。因此,没有线程切换的开销,和多线程相比,线程数量越多,相同数量的协 阅读全文

posted @ 2018-12-18 18:01 ExplorerMan 阅读(943) 评论(0) 推荐(0)

python concurrent.futures

摘要: python因为其全局解释器锁GIL而无法通过线程实现真正的平行计算。这个论断我们不展开,但是有个概念我们要说明,IO密集型 vs. 计算密集型。 IO密集型:读取文件,读取网络套接字频繁。 计算密集型:大量消耗CPU的数学与逻辑运算,也就是我们这里说的平行计算。 而concurrent.futur 阅读全文

posted @ 2018-12-18 17:52 ExplorerMan 阅读(364) 评论(0) 推荐(0)

gevent 协程 使用

摘要: Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。 gevent是第三方库,通过greenlet实现协程,其基本思想是: 当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成 阅读全文

posted @ 2018-12-18 17:46 ExplorerMan 阅读(286) 评论(0) 推荐(0)

python高性能代码之多线程优化

摘要: 以常见的端口扫描器为实例 端口扫描器的原理很简单,操作socket来判断连接状态确定主机端口的开放情况。 这是一个socket扫描器的基本代码。 但是如果直接运行会等待很长时间都没有反应,这是因为socket是阻塞的,到等待每个连接超时后才会进入下一个连接。 给这段代码加一个超时 完整的代码如下 本 阅读全文

posted @ 2018-12-18 17:38 ExplorerMan 阅读(977) 评论(0) 推荐(0)

python并发编程之多进程、多线程、异步和协程

摘要: 一、多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行。即使是单CPU的计算机,也可以通过不停地在不同线程的指令间切换,从而造成多线程同时运行的效果。 多线程相当于一个并发(concunrrency)系统。并发系统一般同时执行多个任务。如果多 阅读全文

posted @ 2018-12-18 17:28 ExplorerMan 阅读(681) 评论(0) 推荐(0)

Python进程间通信Queue

摘要: 1.Queue使用方法: Queue.qsize():返回当前队列包含的消息数量; Queue.empty():如果队列为空,返回True,反之False ; Queue.full():如果队列满了,返回True,反之False; Queue.get():获取队列中的一条消息,然后将其从列队中移除, 阅读全文

posted @ 2018-12-18 17:19 ExplorerMan 阅读(321) 评论(0) 推荐(0)

提高你的Python: 解释‘yield’和‘Generators(生成器)’

摘要: 在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况。一些话题("if/else控制流" 或者 "定义和使用函数")对于大多数学生是没有问题的。但是有一些话题,大多数学生只有很少,或者完全没有任何接触,尤其是“生成器和yield关键字”。我猜这对大多数新 阅读全文

posted @ 2018-12-18 16:28 ExplorerMan 阅读(335) 评论(0) 推荐(0)

尴尬的事情又发生Newtonsoft.Json vs Protobuf.net

摘要: 写程序做下性能测试都是例行的事情了,一般在普通电脑上测试一下如果比较理想那基本不出什么意外!但世事难料,代码写得不好经常担心CPU不够用,其实写得好但不能完全发挥出CPU资源的优势更是一件悲剧的事情!这次事件已经发生了两回,其实还真的很折磨人的。话不多说回到今天的正题Newtonsoft.Json  阅读全文

posted @ 2018-12-18 14:43 ExplorerMan 阅读(285) 评论(0) 推荐(0)

python的多线程到底有没有用?

摘要: 在群里经常听到这样的争执,有人是虚心请教问题,有人就大放厥词因为这个说python辣鸡。而争论的核心无非就是,python的多线程在同一时刻只会有一条线程跑在CPU里面,其他线程都在睡觉。这是真的吗? 是真的。这个就是因为传说中的GIL(全局解释锁)的存在。不明白这个词的可以去百度一下,我解释不好( 阅读全文

posted @ 2018-12-18 12:20 ExplorerMan 阅读(173) 评论(0) 推荐(0)

Python中单线程、多线程和多进程的效率对比实验

摘要: Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread)的情况下,不能发挥多核的优势。而使用多进程(Multiprocess),则可以发挥多核的优势真正地提高效率。 对比实验 资料显示,如果多线程的进程是CPU密集型的,那多线程并不能有多少 阅读全文

posted @ 2018-12-18 12:19 ExplorerMan 阅读(737) 评论(0) 推荐(0)

Python 一篇学会多线程

摘要: 多线程和多进程是什么自行google补脑,廖雪峰官网也有,但是不够简洁,有点晕,所以就整个简单的范例。 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,让你对多线程有个初步的认识。 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是 阅读全文

posted @ 2018-12-18 12:08 ExplorerMan 阅读(372) 评论(0) 推荐(0)

Python中threading的join和setDaemon的区别及用法

摘要: Python多线程编程时,经常会用到join()和setDaemon()方法,今天特地研究了一下两者的区别。 1、join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这个线程时 阅读全文

posted @ 2018-12-18 11:47 ExplorerMan 阅读(222) 评论(0) 推荐(0)

Python 函数定义以及参数传递

摘要: Python 函数定义以及参数传递1.函数定义#形如def func(args...): doSomething123以关键字def 开头,后面是函数名和参数下面是函数处理过程。 举例: def add( a, b ): return a+b12参数可以设定默认值,如: def add( a, b= 阅读全文

posted @ 2018-12-18 11:33 ExplorerMan 阅读(417) 评论(0) 推荐(0)

python的thread和threading区别

摘要: python提供了多种模块用来支持多线程编程, thread(在python3中改名为_thread),threading,和 queue模块。 通过加入queue模块,用户可以创建多个线程共享数据的队列数据结构。 thread和threading模块都可以用来创建和管理线程,而thread模块提供 阅读全文

posted @ 2018-12-18 11:21 ExplorerMan 阅读(4896) 评论(0) 推荐(0)

导航