python 进程和线程(2)
这篇博客是按照博客《进程和线程(1)》中内容用futures改写 with futures.ProcessPoolExecutor() as executor:可以两篇博客对照看。
2改写
from multiprocessing import Pool
from time import sleep
from concurrent import futures
def f(x):
return x*x
def speak(word):
for i in range(3):
print('i am speak:',word,i)
if __name__=='__main__':
x=[1,2,3]
speak(x)
with futures.ProcessPoolExecutor() as executor:
print(list(executor.map(f,x)))
print(type(executor.map(f,x)))
# i am speak: [1, 2, 3] 0
# i am speak: [1, 2, 3] 1
# i am speak: [1, 2, 3] 2
# [1, 4, 9]
# <class 'generator'>
2.1.2改写
from multiprocessing import Pool,Process
import time
from concurrent import futures
def f(x):
time.sleep(2)
print(x*x)
return x*x
def speak(word):
for i in range(3):
print('i am speak:',word,i)
time.sleep(2)
if __name__=='__main__':
startTime=time.time()
x=[1,2,3]
# for i in x:
# p=Process(target=f,args=(i,))
# p.start()
# endTimeSub=time.time()
# print('usetimesub',endTimeSub-startTime)
with futures.ProcessPoolExecutor() as executor:
executor.map(f,x)
endTimeSub=time.time()
print('usetimesub',endTimeSub-startTime)
endTimeMain=time.time()
print('useTime',endTimeMain-startTime)
# usetimesub 0.1450958251953125
#
#
#
# useTime 2.2364883422851562
在上面改写基础上,如果在子进程中停顿3s,看看结果怎么样?
from multiprocessing import Pool,Process
import time
from concurrent import futures
def f(x):
time.sleep(2)
print(x*x)
return x*x
def speak(word):
for i in range(3):
print('i am speak:',word,i)
time.sleep(2)
if __name__=='__main__':
startTime=time.time()
x=[1,2,3]
# for i in x:
# p=Process(target=f,args=(i,))
# p.start()
# endTimeSub=time.time()
# print('usetimesub',endTimeSub-startTime)
with futures.ProcessPoolExecutor() as executor:
executor.map(f,x)
endTimeSub=time.time()
time.sleep(3)
print('usetimesub',endTimeSub-startTime)
endTimeMain=time.time()
print('useTime',endTimeMain-startTime)
#
#
#
# usetimesub 0.1621077060699463
# useTime 3.2041215896606445
可见:1、总使用只时间增加了1s左右;2、主程序没有继续往下走,先等子进程全部执行完再往下走,useTime都是在最后,直接使用p=Process(target=f,args=(i,)),则是新开一个子进程,主进程继续往下走,注意两者区别;3、比较两者执行时间
python 进程和线程(2)的更多相关文章
- python 进程和线程
python中的进程.线程(threading.multiprocessing.Queue.subprocess) Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就 ...
- Python进程、线程、协程
进程和线程的解释 进程(process)和线程(thread)是操作系统的基本概念,计算机的核心是CPU,它承担了所有的计算任务: 单个CPU一次只能运行一个任务,代表单个CPU总是运行一个进程,其他 ...
- python进程、线程、协程(转载)
python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...
- Python进程和线程
引入进程和线程的概念及区别 1.线程的基本概念 概念 线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但 ...
- Python进程、线程、协程详解
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...
- python——进程、线程、协程
Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env pytho ...
- Python进程与线程
进程与线程:*进程: 进程是系统中程序执行和资源分配的基本单元, 每个进程都有自己的数据段(存储数据).代码段(存储代码).堆栈段(对象和变量). # 全局变量等资源在多个进程中不能 ...
- python进程和线程(六)
协程 协程,又称微线程,纤程.英文名Coroutine.顾名思义,协程是协作式的,也就是非抢占式的程序(线程是抢占式的).协程的关键字是yield,一看到这个就想到了生成器对不对?那就顺便回顾一下生成 ...
- python 进程、线程与协程的区别
进程.线程与协程区别总结 - 1.进程是计算器最小资源分配单位 - 2.线程是CPU调度的最小单位 - 3.进程切换需要的资源很最大,效率很低 - 4.线程切换需要的资源一般,效率一般(当然了在不考虑 ...
- python进阶:Python进程、线程、队列、生产者/消费者模式、协程
一.进程和线程的基本理解 1.进程 程序是由指令和数据组成的,编译为二进制格式后在硬盘存储,程序启动的过程是将二进制数据加载进内存,这个启动了的程序就称作进程(可简单理解为进行中的程序).例如打开一个 ...
随机推荐
- docker 为镜像添加ssh服务-使用Dockerfile 创建
首先,基于要添加内容的镜像ubuntu:18.04运行一个容器, 在宿主机(下面步骤是在容器中创建的,应该在宿主机创建进行以下步骤) 一.创建一个工作目录 二.创建Dockerfile 和脚本run. ...
- 洛谷 P2031 脑力达人之分割字串
题目传送门 解题思路: f[i]表示到第i位可获得的最大分割次数,对于每个f[i]都可由其符合条件的前缀转移过来,条件就是当前串除了前缀的剩余字符里有所给单词,然后一看,这不是在剩余字符里找有没有所给 ...
- Docker 学习之镜像导入导出及推送阿里云服务器(三)
在前面两节里主要就是记录一些docker的基本的操作,包括搜索镜像,拉取镜像,根据镜像创建容器等等,在这一节主要就是记录Docker对于镜像文件的导入导出,及推送到阿里云再从阿里云获取镜像. 一.镜像 ...
- 清北学堂例题 LUOGU2523【HAOI2011】problem c
题目描述 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1 ...
- spark aggregate算子
spark aggregate源代码 /** * Aggregate the elements of each partition, and then the results for all the ...
- 吴裕雄--天生自然java开发常用类库学习笔记:Set接口
import java.util.HashSet ; import java.util.Set ; public class HashSetDemo01{ public static void mai ...
- ACM-吴奶奶买鱼
题目描述:吴奶奶买鱼 吴奶奶有个可爱的外孙女——琪琪,她很喜欢小动物,尤其喜欢养鱼.为了让小孙女养到漂亮的小鱼,吴奶奶一大早就到花鸟鱼虫市场买鱼.这个市场可真大,里面有各种各样的宠物,就连宠物鱼都 ...
- 官网英文版学习——RabbitMQ学习笔记(七)Topic
在上一篇中使用直接交换器改进了我们的系统,使得它能够有选择的进行接收消息,但它仍然有局限性——它不能基于多个条件进行路由.本节我们就进行能够基于多个条件进行路由的topics exchange学习. ...
- 洛谷 P1934 封印
题目传送门 解题思路: f[i]表示打到第i层的最小值 AC代码: #include<iostream> #include<cstdio> using namespace st ...
- 概率图模型之EM算法
一.EM算法概述 EM算法(Expectation Maximization Algorithm,期望极大算法)是一种迭代算法,用于求解含有隐变量的概率模型参数的极大似然估计(MLE)或极大后验概率估 ...