Python-线程池、进程池,协程

线程池&进程池

在python2中没有提供,在python3之后才提供

  • 作用:保证程序中最多可以创建的线程的个数
import time from concurrent.futures import ThreadPoolExecutordef task(n1,n2):    time.sleep(1)    print(‘星空不问赶路人‘)pool = ThreadPoolExecutor(10) # 创建线程池for i in range(100):    pool.submit(task,i,1)pool.shutdown(True) # 等线程池中任务执行完毕之后,再继续往后走print(‘岁月不负有心人‘)
import time from concurrent.futures import ThreadPoolExecutordef task(arg):    time.sleep(1)    print(‘星空不问赶路人‘)    return ‘岁月不负有心人‘ret = pool.map(task,range(1,20))  # 具有返回值print(‘end‘,ret)pool.shutdwon(True)for i in ret:    print(i)   # 直接输出i
import timefrom concurrent.futures import ThreadPoolExecutordef task(n1,n2)    time.sleep(1)    print(‘星空不问赶路人‘)    return ‘岁月不负有心‘+str(n1+n2)pool = ThradPoolExecutor(10)  # 创建进程future_list = []for i in range(20):    fu = pool.submit(task,i,1) # 具有返回值    future_list.append()pool.shutdown(True)for i in future_list:    print(i.result())   # 后面加result

进程池

import timefrom concurrent.futures import ProcessPoolExecutordef task(n1,n2):    time.sleep(1)    print(‘many are called,few are chosen‘)pool = ProcessPoolExecutor(10)if __name__ == ‘__main__‘:    for i in range(20):        pool.submit(task,i,1)    pool.shutdown(True)    print(‘early birds get the worm‘)

引入进程池和线程池的目的:限制创建线程或进程的个数,防止无节制创建线程,导致效率降低

pool = ProcessPoolExecutor(10)中的10表示最多创建10个

创建线程越多越好?

不是,线程创建的如果过多。导致线程上下文切换过多,效率降低

协程

协程非常节省资源,实际不存在,程序员创建的

协程又可以称为‘微线程’,实际上是让一个线程轮番去执行一些任务协程+IO切换的功能就可以完成并发的操作协程+IO切换本质上节省资源

协程+IO切换的实例

  • gevent(内部依赖greenlet)
  • pip3 install gevent
from gevent import monkeymonkey.patch_all()import time import geventdef eat():    print(‘夜已沉默‘)    time.sleep(3)    print(‘人生风景在游走‘)def play():    print(‘心事向谁说‘)    time.sleep(3)    print(‘每当孤独我回首‘)g1 = gevent.spawn(eat)g2 = gevent.spawn(play)gevent.joinall([g1,g2])?# 夜已沉默# 心事向谁说# 人生风景在游走# 每当孤独我回首
进程/线程/协程的区别:        进程是计算机中分配资源最小的单位,线程是计算机中被cpu调度最小的单位;        协程又称为"微线程",是基于人为代码创造的,而进程和线程是计算机中真是存在的,            一个进程中可以创建多个线程,且资源共享,一个线程可以创建多个协程        计算密集型,多进程        IO密集型,多线程/协程+IO切换        单纯的协程是没有办法提高并发,只是代码之间来回切换,加上IO自动切换才有意义,有IO操作用协程

原文地址:https://www.cnblogs.com/womenzt/p/12430174.html

时间: 2024-07-31 17:31:26

Python-线程池、进程池,协程的相关文章

线程池Python 线程、进程和协程

Python   线程 Threading是用于提供线程相关的操作,线程是应用程序中工作的最小单元.线程与进程的关系下图所示: 子线程是由主线程产生的,但两者并没有关联. 利用threading创建线程: 1 '''利用threading包创建''' 2 import threading 3 import time 4 5 def run(n): 6 time.sleep(2) 7 print("task:",n) 8 9 '''串行:一个运行完后,再运行另外一个''' 10 run(

python线程、进程和协程

链接:http://www.jb51.net/article/88825.htm 引言 解释器环境:python3.5.1 我们都知道python网络编程的两大必学模块socket和socketserver,其中的socketserver是一个支持IO多路复用和多线程.多进程的模块.一般我们在socketserver服务端代码中都会写这么一句: server = socketserver.ThreadingTCPServer(settings.IP_PORT, MyServer) Threadi

python线程、进程、协程

进程与线程之间的定义 计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构——进程控制块. 进程就是一个程序在一个数据集上的一次动态执行过程. 进程一般由程序.数据集.进程控制块三

python 线程,进程与协程

引言 线程 创建普通多线程 线程锁 互斥锁 信号量 事件 条件锁 定时器 全局解释器锁 队列 Queue:先进先出队列 LifoQueue:后进先出队列 PriorityQueue:优先级队列 deque:双向队列 引言 在学习过socket和socketserver后,我们了解到socketserver可以支持IO多路复用.在定义socketserver服务端的时候一般会使用: server = socketserver.ThreadingTCPServer(settings.IP_PORT,

Python:线程、进程与协程(1)——概念

最近的业余时间主要放在了学习Python线程.进程和协程里,第一次用python的多线程和多进程是在两个月前,当时只是简单的看了几篇博文然后就跟着用,没有仔细去研究,第一次用的感觉它们其实挺简单的,最近这段时间通过看书, 看Python 中文官方文档等等相关资料,发现并没有想想中的那么简单,很多知识点需要仔细去理解,Python线程.进程和协程应该是Python的高级用法.Python的高级用法有很多,看看Python 中文官方文档就知道了,当然有时间看看这些模块是怎么实现的对自己的提高是很有帮

Python之路【第七篇】:线程、进程和协程

Python之路[第七篇]:线程.进程和协程 Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time   def show(arg):     time.sleep(1)     print 'thread'+str(arg)   for i in

Python菜鸟之路:Python基础-线程、进程、协程

上节内容,简单的介绍了线程和进程,并且介绍了Python中的GIL机制.本节详细介绍线程.进程以及协程的概念及实现. 线程 基本使用 方法1: 创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入 import threading import time def worker(): time.sleep(2) print("test") for i in range(5): t = threading.Thread(target=

Python:线程、进程与协程(4)——multiprocessing模块(1)

multiprocessing模块是Python提供的用于多进程开发的包,multiprocessing包提供本地和远程两种并发,通过使用子进程而非线程有效地回避了全局解释器锁. (一)创建进程Process 类 创建进程的类,其源码在multiprocessing包的process.py里,有兴趣的可以对照着源码边理解边学习.它的用法同threading.Thread差不多,从它的类定义上就可以看的出来,如下: class Process(object):     '''     Proces

Python:线程、进程与协程(3)——Queue模块及源码分析

Queue模块是提供队列操作的模块,队列是线程间最常用的交换数据的形式.该模块提供了三种队列: Queue.Queue(maxsize):先进先出,maxsize是队列的大小,其值为非正数时为无线循环队列 Queue.LifoQueue(maxsize):后进先出,相当于栈 Queue.PriorityQueue(maxsize):优先级队列. 其中LifoQueue,PriorityQueue是Queue的子类.三者拥有以下共同的方法: qsize():返回近似的队列大小.为什么要加"近似&q

Python:线程、进程与协程(2)——threading模块(1)

上一篇博文介绍了Python中线程.进程与协程的基本概念,通过这几天的学习总结,下面来讲讲Python的threading模块.首先来看看threading模块有哪些方法和类吧. 主要有: Thread :线程类,这是用的最多的一个类,可以指定线程函数执行或者继承自它都可以实现子线程功能. Timer:与Thread类似,但要等待一段时间后才开始运行,是Thread的子类. Lock :原锁,是一个同步原语,当它锁住时不归某个特定的线程所有,这个可以对全局变量互斥时使用. RLock :可重入锁