进程池/线程池/协程

导入进程池线程池模块@@

from concurrent import ProcessPoolExecutor,ThreadPoolExecutor

同步提交,异步提交@@

from concurrent import ProcessPoolExecutor,ThreadPoolExecutor
import os
def foo(name):
print(‘进程%s,进程号为%s‘%(name,os.getpid()))
return os.getpid()

if __nmae__==‘__main__‘:
pool=ProcessPoolExecutor(5)
lis=[]
for i in range(10):
future=pool.submit(foo,i)#异步提交,提交完一个任务后,直接执行下一行代码,我们可以把生成的future对象保存在一个列表中,等到进程池内所有任务运行完再用对象调用result方法获得任务返回的结果
#res=pool.submit(foo,i).result()同步提交:提交完一个任务后,就在原地等任务的执行结果,拿到执行结果后,再执行下一行代码,会导致任务是串行执行的
#print(res)
lis.append(future)
pool.shutdown(wait=True)#shutdown代表的是关闭进程池的入口,不让新的任务往进程池里提交,wait代表的是等待进程池内所有的任务执行完毕
for i in (lis):
print(i.result())

print(‘主进程‘)

回调函数@@

from concurrent.future import ProcessPoolExecutor,ThreadPoolExecutor

def foo(i):
print(‘第%s进程进来了‘%s)

return i**2

def get(future):

print(future*2)

if __name__==‘__main__‘:
pool=ProcessPoolExecutor(5)
for i in range(10):
future=pool.submit(foo,i)
future.add_done_callback(get)#进程中在任务执行完毕后get会自动触发,获得的参数是future,执行get函数的是主进程,而在线程中则是由空闲的线程来执行
pool.shutdown(wait=True)

print(‘zhu‘)

并发编程之协程@@

并发的本质:切换+保存状态
cpu正在运行一个任务,会有两种情况会切走取执行其他的任务,一种是该任务遇到阻塞,另一种情况是该任务的计算时间过长或者有其他级别更高的程序替代了他
协程的本质就是在一个单线程下,用户自己控制一个任务遇到io就切换到其他任务去执行,切换的时候需要把之前的任务状态保存下来,以便于重新运行此任务时,可以从暂停的位子继续运行

协程介绍@@

协程是单线程下的并发,又称为微线程,纤程,协程是一种用户态的轻量级线程,由用户自己控制调度

安装[email protected]@
pip3 install gevent

from gevent import monkey;monkey.patch_all#需要使用gevent模块必须把这行代码放在最前边,用来检测协程的阻塞状态
from gevent import spawn#spawn相当于提交

import time

def foo(name):
print(‘%s is running‘%name)
time.sleep(2)
print(‘%s is down‘%name)

def var(name):
print(‘%s is running‘%name)
time.sleep(2)
print(‘%s is down‘%name)

g1=spawn(foo,‘egon‘)
g2=spawn(foo,‘lili‘)
g1.join()
g2.join()
print(‘zhu‘)

原文地址:https://www.cnblogs.com/fushaunglin/p/9621973.html

时间: 2024-10-12 16:45:13

进程池/线程池/协程的相关文章

Python 中的进程、线程、协程、同步、异步、回调

进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享<Python中的进程.线程.协程.同步.异步.回调>. 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状

Python之路(十八):进程,线程,协程

python基础之进程.线程.协程 引子 进程 线程(优先阅读) 协程 进程 概念:就是一个程序在一个数据集上的一次动态执行过程(本质上来讲,就是运行中的程序(代指运行过程),程序不运行就不是进程)    抽象概念 组成:  1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成  2.数据集:数据集则是程序在执行过程中所需要使用的资源  3.进程控制块:进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志. 阐释:进程

进程和线程、协程的区别

现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来.python中也有协程库,tornado中也用了gevent封装好的协程.本文主要介绍进程.线程和协程三者之间的区别. 一.概念 1.进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信.由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈.寄存器.虚拟内存.文件句柄等)比较大,但相对比较稳定安全. 2.线

进程、线程和协程的理解

转自 http://blog.leiqin.info/2012/12/02/%E8%BF%9B%E7%A8%8B-%E7%BA%BF%E7%A8%8B%E5%92%8C%E5%8D%8F%E7%A8%8B%E7%9A%84%E7%90%86%E8%A7%A3.html 进程.线程和协程的理解 进程.线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下. 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由

Python 进程、线程、协程、锁机制,你知多少?

1.python的多线程到底有没有用? 2. 为什么在python里推荐使用多进程而不是多线程 3.进程.线程.协程.各种锁

进程、线程、协程总结

进程.线程.协程三兄弟那些事 1.线程 定义:线程是操作系统能够进行运算调度的最小单位. 自我理解:线程开放,共享资源,线程是系统的调用资源顺序,进程是直接给CPU用的,属于耗CPU型. 特点决定用法(多线程) 2.进程 定义:程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程. 自我理解:进程保守,封装资源.程序本身是不能执行的,它只是一些静态代码,但是交给操作系统后就会读取到动态活动.进程是一堆指令的集合,至少有一个主线程.进程的运行需要分配资

python之进程、线程、协程的调度原理

进程.线程和协程的调度和运行原理总结. 进程.线程的调度策略介绍 linux的操作系统详细调度策略可参考:http://blog.csdn.net/gatieme/article/details/51872659 linux中的进程主要有三种调度策略: 优先级调度:将进程分为普通进程和实时进程: 先进先出(队列)调度:实时进程先创建的先执行,直到 轮转调度(时间片):达到一定的CPU执行时间后强制切换: 多进程程序的调度其实还是线程的调度,线程才是CPU调度的基本单位:在同一个进程内线程切换不会

浅谈进程、线程和协程三者之间的区别和联系

一.进程.线程.协程 1,进程 经典定义:一个执行中程序的实例.系统中的每个程序都运行在某个进程的上下文中.(-摘自 CSAPP) 进程是系统资源分配的最小单位 2,线程(thread) 线程就是运行在进程上下文中的逻辑流. 线程是操作系统能够进行运算调度的最小单位. 3,协程 相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛. 根据维基百科对子例程的描述:是一个大型程序中的某部分代码,由一个或多个语句块组成.它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性.我可

进程、线程、协程和GIL

进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要使用的资源:进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志. 线程 线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程内并发成为可能. 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是

进程、线程、协程的关系

参考来源:https://blog.csdn.net/chengqiuming/article/details/80573288    https://www.cnblogs.com/guolei2570/p/8810536.html 协程不是进程,也不是线程,它就是一个函数,一个特殊的函数——可以在某个地方挂起,并且可以重新在挂起处继续运行.所以说,协程与进程.线程相比,不是一个维度的概念.一个进程可以包含多个线程,一个线程也可以包含多个协程,也就是说,一个线程内可以有多个那样的特殊函数在运行