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.进程 程序是由指令和数据组成的,编译为二进制格式后在硬盘存储,程序启动的过程是将二进制数据加载进内存,这个启动了的程序就称作进程(可简单理解为进行中的程序).例如打开一个 ...
随机推荐
- ESX/ESXi 主机上的每个插槽中安装了多少内存
要确定在 ESX/ESXi 主机上的每个插槽中安装了多少内存,请执行以下操作: 1. 启动ssh服务 2. 登陆esxi主机查看 使用 SSH 客户端登录主机,以 root 用户身份运行以下命令之一: ...
- R 《回归分析与线性统计模型》page93.6
rm(list = ls()) #数据处理 library(openxlsx) library(car) library(lmtest) data = read.xlsx("xiti4.xl ...
- 彻底理解JavaScript中的this
this 是 JavaScript 语言的一个关键字. 它是函数运行时,在函数体内自动生成的一个对象,只能在函数体内使用. 函数的不同使用场合,this 有不同的值.总的来说,this 就是函数运行时 ...
- RDD 可视化 —— RDDOperationScope.withScope
最近在看各种博客,学习 spark 源代码. 网上对源代码的分析基本都是基于 0.7, 0.8, 1.0 的代码,而现在的发行版已经是 1.5 了.所以有些代码不大对的上.比如函数 RDD.map() ...
- synchronized原理及优化,(自旋锁,锁消除,锁粗化,偏向锁,轻量级锁)
偏向锁:不占用CPU自旋锁:占用CPU.代码执行成本比较低且线程数少时,可以使用 .不经过OS.内核态,效率偏低 理解Java对象头与Monitor 在JVM中,对象在内存中的布局分为三块区域:对象头 ...
- centos7下安装ansible
由于centos7预装了python,因此我们可以跳过python的安装环节(记得关闭防火墙) [root@model ~]# [root@model ~]# python --version Pyt ...
- C#知识点回顾随笔目录导航
此随笔只是春节期间回顾知识点,阅读<<C#学习笔记>>记录(2019-2-4至2019...); 使用有道云笔记记录可能会有些排版问题 思维导图预览(使用的有道云,无法截取完整 ...
- A convenient way to recognize and handwrite multidimensional arrays in Numpy
As a new learner of Numpy, it is very common to be confused by the form of array, braces nested in b ...
- OpenCV HOGDescriptor 参数图解
防止以后再次掉入坑中,决定还是在写写吧 OpenCV中的HOG特征提取功能使用了HOGDescriptor这个类来进行封装,其中也有现成的行人检测的接口.然而,无论是OpenCV官方说明文档还是各个中 ...
- 116-PHP调用类成员函数
<?php class ren{ //定义人类 public function walk(){ //定义人类的成员方法 echo '我会走路.'; } } $ren=new ren(); //实 ...