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.进程 程序是由指令和数据组成的,编译为二进制格式后在硬盘存储,程序启动的过程是将二进制数据加载进内存,这个启动了的程序就称作进程(可简单理解为进行中的程序).例如打开一个 ...
随机推荐
- Oracle 的DBA考证
转自 :https://www.cnblogs.com/chunge2050/archive/2013/04/16/3023730.html 详细的了解了几天之后,总结起来就是oracle为DBA认证 ...
- C语言拾遗——strtok
C语言拾遗——strtok 今天刷PAT的时候用到了这个strtok函数,顺手就记录一下 strtok函数包含于头文件string.h 语法:char *strtok( char *str1, con ...
- Mybatis 向MySql数据库插入带有日期类型字段的数据
我们的实体类里面一个字段的日期类型是util.Date,在向数据库插入该实体时会报错,说是 日期哪个字段 Data truncation.所以需要做些更改在mybatis的MAPPER映射文件中对插入 ...
- Java8系列 (四) 静态方法和默认方法(转载)
静态方法和默认方法 我们可以在 Comparator 接口的源码中, 看到大量类似下面这样的方法声明 //default关键字修饰的默认方法 default Comparator<T> t ...
- gitolite服务器配置的一些心得
1.假设说有服务器1,hostname为lab1,服务器2,hostname为lab2,分别生成的给对方使用的公钥为server-lab1.pub.server-lab2.pub,服务器1和2都有自己 ...
- ORA-22813 ORA-06512
ORA-22813:操作数值超出系统限制. 原因: 对象或集合值太大.SORT上下文中值的大小可能超过30k,或者可用内存的大小可能太大. 操作: 选择其他值并重试该操作. ORA-06512错 ...
- [LeetCode] 933. Number of Recent Calls 最近的调用次数
Write a class RecentCounter to count recent requests. It has only one method: ping(int t), where t r ...
- 实验吧-密码学-Fair-Play(Playfair解密)
这个题是Playfair解密. Playfair解密算法首先将密钥填写在一个5*5的矩阵中(去Q留Z),矩阵中其它未用到的字母按顺序填在矩阵剩余位置中,根据替换矩阵由密文得到明文. 对密文解密规则如下 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 函数
函数是一组一起执行一个任务的语句.每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 可以把代码划分到不同的函数中.如何划分代码到不同的函数中是由您 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-print
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...