python基础-第九篇-9.3线程池】的更多相关文章

简单版 import queue import threading class ThreadPool(object): def __init__(self, max_num=20): self.queue = queue.Queue(max_num) for i in range(max_num): self.queue.put(threading.Thread) def get_thread(self): return self.queue.get() def add_thread(self)…
单线程 import time beginTime = time.time() for a in range(10): print(a) time.sleep(1) shijian = time.time() - beginTime print(shijian) #10.000571966171265 我们可以看到,上面这段代码就是纯正的单线程,一条道走到黑,讲究先后,所以花了10秒多 多线程 毕竟等待是让人心烦的,有什么方法能不这么耗时间啊,有啊,主角登场,欢迎多线程,那多线程做了一件什么事呢…
了解相关概念之前,我们先来看一张图 进程: 优点:同时利用多个cpu,能够同时进行多个操作 缺点:耗费资源(重新开辟内存空间) 线程: 优点:共享内存,IO操作时候,创造并发操作 缺点:抢占资源 通过对比,我们可以得出: 由于计算多用到cpu,所以多进程适合计算密集型 由于IO操作不用到cpu,所以多线程适合IO密集型 进程不是越多越好,cpu个数=进程个数 线程也不是越多越好,具体案例具体分析,请求上下文切换耗时 计算机中执行任务的最小单位:线程 进程和线程的目的都是提高效率 另外,GIL全局…
注:技术尚浅,时间匆忙,如有错误或者不当之处值得商榷的,请留言,吾必思而改之. 第一篇 :Python基础- 安装/变量/输入/及循环语句使用 第二篇:  Python基础- 常用数据类型 第三篇: Python基础- 集合,文件操作 和 函数详解 第四篇: Python基础- 装饰器-迭代器-生成器-内置函数-json/pickle 第五篇: Python基础- 常用模块的使用 第六篇: Python基础- 面向对象编程基础 第七篇: Python基础- 面向对象编程进阶 第八篇: Pytho…
低版本: #!/usr/bin/env python import threading import time import queue class TreadPool: """ 将线程加入到队列中作为资源去完成任务 优点:简单好写容易理解 缺点:太尼玛多了..... """ def __init__(self, maxsize): self.maxsize = maxsize self._q = queue.Queue(maxsize) for…
Python标准库为我们提供了threading(多线程模块)和multiprocessing(多进程模块).从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了 ThreadPoolExecutor 和 ProcessPoolExecutor 两个类,实现了对threading和multiprocessing的更高级的抽象,对编写线程池/进程池提供了直接的支持. Executor是一个抽象类,它不能被直接使用.但是它提供的两个子类ThreadPoolE…
python 多进程:多进程 先上代码: pool = threadpool.ThreadPool(10) #建立线程池,控制线程数量为10 reqs = threadpool.makeRequests(get_title, data, print_result) #构建请求,get_title为要运行的函数,data为要多线程执行函数的参数 #最后这个print_result是可选的,是对前两个函数运行结果的操作 [pool.putRequest(req) for req in reqs] #…
在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue.LinkedBlockingQueue.PriorityBlockingQueue.SynchronousQueue.BlockingDeque接口.ConcurrentHashMap,本文为系列文章第九篇. CountDownLatch是一种线程同步辅助工具,它允许一个或多个线程等待其他线程正在执行的一组操作完成.CountDownLatch的概念在…
Java中的线程池是运用场景最多的并发框架,几乎所有需求异步或并发执行任务的程序都可以使用线程池.在开发过程中,合理地使用线程池能够带来3个好处. 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行 提高线程的可管理性:线程是稀缺资源,如果无限制地创建,不仅消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配.调优和监控 线程池的实现原理 当向线程池提交一个任务之后,线程池是如何处理这个任务呢?如图 从…
新建状态: 一个新产生的线程从新状态开始了它的生命周期.它保持这个状态直到程序 start 这个线程. 运行状态:当一个新状态的线程被 start 以后,线程就变成可运行状态,一个线程在此状态下被认为是开始执行其任务 就绪状态:当一个线程等待另外一个线程执行一个任务的时候,该线程就进入就绪状态.当另一个线程给就绪状态的线程发送信号时,该线程才重新切换到运行状态. 休眠状态: 由于一个线程的时间片用完了,该线程从运行状态进入休眠状态.当时间间隔到期或者等待的时间发生了,该状态的线程切换到运行状态.…
import threading import sys import time def showa(): while True: lockc.acquire() #获取对方的锁,释放自己的锁 print('a',end='') sys.stdout.flush() #释放缓冲区 locka.release() time.sleep(0.2) def showb(): while True: locka.acquire() print('b',end='') sys.stdout.flush()…
简要: paramiko模块 进程与线程 python GIL全局解释器锁 一.PARAMIKO模块 实现远程ssh执行命令 #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:wanghui import paramiko ssh = paramiko.SSHClient() #创建ssh对象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许连接不在know_host…
内容提要 paramiko模块 进程.与线程区别 python GIL全局解释器锁 多线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 多进程 语法 join 进程Queue 进程Pipe 进程Manager 进程同步 进程池 1.paramiko模块 安装:若已安装pip则:pip install paramiko 利用paramiko实现ssh,返回命令结果 #! /usr/bin/env python3 # -…
一.正则表达式基础 1.正则表达式介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持的语法通常是不常用的部分.如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了. 下图展示了使用正则表达式进行匹配的流程: 正则表达式的大致匹…
1 基于UDP套接字1.1 介绍 udp是无连接的,是数据报协议,先启动哪端都不会报错 udp服务端 import socket sk = socket() #创建一个服务器的套接字 sk.bind() #绑定服务器套接字 while True: #服务器无限循环 cs = sk.recvfrom()/sk.sendto() # 对话(接收与发送) sk.close() # 关闭服务器套接字 udp客户端 import socket client = socket() # 创建客户套接字 whi…
一.运算符 1.算数运算: 算数运算符相信大家都不陌生吧,尤其是加减乘除,好!那我就带着大家看看最后三个,这三个到底是干什么玩意的? %,取两数相除的余数,看图: **,x的多少次幂,看图: //,取整除,你可以理解为向下取整,看图: 2.比较运算: 注意:当为一个等号时,多为赋值,两个等号为比较,另外不等于常用是!= 3.赋值运算: 4.逻辑运算: 逻辑运算符里,and和or好理解,那我就讲一下not:这家伙就是唱反调的--看图 5.成员运算: 成员运算符,从字面上意思去理解,问谁是不是某组织…
变量及数据类型 Numbers数字分为:int整型,long长整型,float浮点型,complex复数 String字符串由数字.字母.下划线组成的一串字符,用于表示文本的数据类型 bool布尔型:True,False,用于做判断(True实际值是1,False实际值是0) List列表,支持字符,数字,字符串以包含列表(即嵌套),用[]标识,有序对象 Tuple元祖,用()标识,不能二次赋值,可以理解成不可变的列表(只读列表),有序对象 Dict字典,用{}标识,由索引(key)和它对应的值…
python操作Mysql,很方便,使用的MySQLdb的库,基本的操作如下: 查询: try: conn = MySQLdb.connect(host=self.ip, user=self.username,passwd=self.password, db=self.dbname, port=self.port) cur = conn.cursor() cur.execute(sql) rows = cur.fetchall() data = rows except MySQLdb.Error…
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数  函数与函数式编程 1.面向对象: 华山派---->类----> class2.面向过程: 少林派---->过程---->def3.函数式编程:逍遥派---->函数---->def 函数与函数式编程 1.介绍: 在过去的十年间,大家广为熟知的编程方法无非两种:面向对象和面向过程,其实,无论哪种,都是一种编程的规范或者是…
一.三元运算 if True: name='a' else: name='b' #上面的代码用三元运算表示: name="a" if True else "b" 二.类中方法查看 Python中一切事物都是对象,对象由类创建 type 查看对象类型 dir(类型名)  查看类中提供的所有功能 help(类型名)    查看类中提供的功能详细 help(类型名.方法名) 查看类中某功能的详细 三.类型常用功能 1.整形 abs(x) #返回绝对值 x+y,x-y,x*…
一.第一句python代码 1.python执行过程:1.加载内存-词法分析-语法分析-编译-执行 2.创建hello.py文件,输入内容 #!/usr/bin/env python print "Hello" 执行 hello.py 文件:python hello.py 3.解释器:上面执行hello.py 脚本时已明确指出用python解释器来执行,如果想要像shell脚本一样执行就要在开头指定解释器 二.编码 1.python解释器在加载 .py 文件中的代码时,会对内容进行编码…
进程 定义:进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的基本单位 线程…
1.安装之前我们要先去python的官网下载python的安装包 下载地址:https://www.python.org/downloads/ Python 官网有两个版本一个是3.5.2(最新版)一个是2.7.12版本(老版本) 未来实际中都会使用python3.5的版本,2.7的版本是一个过度的版本官网会维护到2020年,所有安装教程是针对3.5的版本,其实2.7和3.5的安装都是相同的 2.安装 PS: Add Python 3.5 to PATH    #这个选项的意思是安装好Pytho…
pets = ['dog','cat','dog','goldfish','cat','rabbit','cat'] print(pets) for pet in pets: print(pet) #------------------------------------------ pets = ['dog','cat','dog','goldfish','cat','rabbit','cat'] print(pets) while pet in pets: print(pet) 上述代码都想…
守护进程 1.守护子进程 主进程创建守护进程  其一:守护进程会在主进程代码执行结束后就终止  其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children 注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止 我们来看一个例子 from multiprocessing import Process import os,time,random def task()…
模块是把程序代码和数据封装的Python文件,也就是说,每一个以扩展名py结尾的Python源代码文件都是一个模块.每一个模块文件就是一个独立的命名空间,用于封装顶层变量名:在一个模块文件的顶层定义的所有的变量名(函数名也是一个变量名),称作模块的属性.导入模块给予了对模块的全局作用域中的变量名的读取权,也就是说,在模块导入时,模块文件的全局作用域变成了模块内对象的命名空间. 导入一个模块之后,可以使用模块中定义的属性,例如,在模块moduleA中导入一个模块moduleB,那么moduleB就…
一.python的介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. (龟叔:2005年加入谷歌至2012年,2013年加入Dropbox直到现在,依然掌握着Python发展的核心方向,被称为仁慈的独裁者). 最新的TIOBE排行榜,Python赶超PHP占据第4, Python崇尚优美.清晰.简单,是一个优秀并广泛使用的语言.…
final关键字:final:最终,终极 final:作用:修饰类,变量,方法.成员变量的访问 1.final修饰变量: final修饰局部变量: 把这个局部变量 变成一个厂里,这个厂里只能被赋值一次 final修饰成员变量: 要求这个成员变量 在创建对象之前必须初始化 所以final修饰的成员变量 第一直觉赋值 第二构造方法赋值 但是也只能赋值一次 2.final修饰的类:(太监类) ,不能被子类继承(String) final修饰的方法:(子类不能重写) 静态代码块:通常写到成员位置 *  …
数字概念,字符串----小数据池 数字的范围:-5---256 字符串: 1,不能有特殊字符 2,s*20还是同一个地址,s*21之后就是另外一个地址 i1 = 6 i2 = 6 print(id(i1),id(i2))#True i3 = 300 i4 = 300 print(id(i3),id(i4))#False #剩下的list dict tuple set,没有小数据池的概念 l1 = [1,] l2 = [1,] print(l1 is l2) #False i1 = 6 i2 =…
1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ? 1 names = ['Alex',"Tenglan",'Eric'] 通过下标访问列表中的元素,下标从0开始计数 ? 1 2 3 4 5 6 7 8 >>> names[0] 'Alex' >>> names[2] 'Eric' >>> names[-1] 'Eric' >>> names[-…