Process对象的其他属性:
标签(空格分隔): process
join方法:
在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况:
- 情况一:在主进程的任务与子进程的任务彼此独立的情况下,主进程的任务先执行完毕后,主进程还需要等待子进程执行完毕,然后统一回收资源
- 情况二:如果主进程的任务在执行到某一个阶段时,需要等待子进程执行完毕后才能继续执行,就需要有一种机制能够让主进程检测子进程是否运行完毕,在子进程执行完毕后才继续执行,否则一直在原地阻塞,这就是join方法的作用
from multiprocessing import Process
import time
import random
import os
def task():
print('%s is piaoing' %os.getpid())
time.sleep(random.randrange(1,3))
print('%s is piao end' %os.getpid())
if __name__ == '__main__':
p=Process(target=task)
p.start()
p.join() #等待p停止,才执行下一行代码
print('主')
问题:有了join,程序不就是串行了吗???
from multiprocessing import Process
import time
import random
def task(name):
print('%s is piaoing' %name)
time.sleep(random.randint(1,3))
print('%s is piao end' %name)
if __name__ == '__main__':
p1=Process(target=task,args=('egon',))
p2=Process(target=task,args=('anly',))
p3=Process(target=task,args=('xiaohong',))
p4=Process(target=task,args=('wuwu',))
p1.start()
p2.start()
p3.start()
p4.start()
# 有的同学会有疑问: 既然join是等待进程结束, 那么我像下面这样写, 进程不就又变成串行的了吗?
# 当然不是了, 必须明确:p.join()是让谁等?
# 很明显p.join()是让主线程等待p的结束,卡住的是主进程而绝非子进程p,
p1.join()
p2.join()
p3.join()
p4.join()
print('主')
因为:p1.start()
p2.start()
p3.start()
p4.start()已经发给操作系统了,住进程在等待p1的过程中,p2和p3也在运行,所以说,住进程的等待时间就是:p1,p2,p3,p4最长的时间,并不是一个一个的;
from multiprocessing import Process
import time,os
def task():
print('%s is running ,parent id is <%s>' %(os.getpid(),os.getppid()))
time.sleep(random.randint(1,3))
print('%s is running ,parent id is <%s>' %(os.getpid(),os.getppid()))
if __name__ == '__main__':
p=Process(target=task)
p.start()
print(p.is_alive())
p.join()
print('主',os.getpid(),os.getppid())
print(p.pid)
print(p.is_alive())
- is_alive()是判断该进程是死进程还是活进程;
from multiprocessing import Process
import time,os
def task():
print('%s is running ,parent id is <%s>' %(os.getpid(),os.getppid()))
time.sleep(random.randint(1,3))
print('%s is running ,parent id is <%s>' %(os.getpid(),os.getppid()))
if __name__ == '__main__':
p=Process(target=task,)
p.start()
p.terminate()
print(p.is_alive())
print('主')
执行结果:
True
主
terminate()只是给操作系统发了个信号,但是操作系统不能立刻结果的,所以我们要等待一段时间;
在上边的程序中加入time.sleep(3)
再次运行就可以了;
本节重点就是:join 方法,其余为了解;
Process对象的其他属性:的更多相关文章
- 并发编程---Process对象的其他属性或方法
Process对象的其他属性或方法 #join方法 from multiprocessing import Process import time,os ''' 需求:让主进程等着子进程运行完毕,才能 ...
- 并发编程 - 进程 - 1.开启子进程的两种方式/2.查看pid/3.Process对象的其他属性或方法/4.守护进程
1.开启子进程的两种方式: # 方式1: from multiprocessing import Process import time def task(name): print('%s is ru ...
- Day9 进程理论 开启进程的两种方式 多进程实现并发套接字 join方法 Process对象的其他属性或者方法 守护进程 操作系统介绍
操作系统简介(转自林海峰老师博客介绍) #一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 #二 多道技术: 1.产生背景: ...
- python 并发编程 多进程 Process对象的其他属性方法 join 方法
一 Process对象的join方法 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一: 在主进程的任务与子进程的任务彼此独立的情况下 ...
- python 并发编程 多进程 Process对象的其他属性方法 terminate与is_alive name pid 函数
进程对象的其他方法一: terminate与is_alive is_alive() 立刻查看的子进程结果 是否存活 from multiprocessing import Process impor ...
- 进程之 Process join方法其他属性与进程Queue
Process join方法 以及其他属性 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一:在主进程的任务与子进程的任务彼此独立的情 ...
- 并发编程(Process对象的join方法)(
一. Process对象的join方法 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一:在主进程的任务与子进程的任务彼此独立的情况下 ...
- 8 并发编程-(线程)-多线程与多进程的区别&Thread对象的其他属性或方法
1.开启速度 在主进程下开启线程比 开启子进程快 # 1 在 主进程下开启线程 from threading import Thread def work(): print('hello') if ...
- 并发编程 - 线程 - 1.开启线程的两种方式/2.进程与线程的区别/3.Thread对象的其他属性或方法/4.守护线程
1.开启线程的两种方式: 进程,线程: 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合)而线程才是cpu上的执行单位) 1.同一个进程内的多个线程共享该进程内的地址资源 2.创建线 ...
随机推荐
- js分钟数转天-时-分
//js格式化分钟转为天.时.分 function formatMinutes(minutes) { )); ? Math.floor((minutes - day * ) / ) : Math.fl ...
- 15. combobox、combotree获取显示值和value值方式
$('#form1 #clsName').combobox('getValue'); $('#form1 #clsName').combobox('getText'); $('#form1 #clsN ...
- springBoot整合MongoDB(单机)
依赖: <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mon ...
- centos7.5安装VirtualBox
centos7.5安装minikube时要求先安装VirtualBox 1.准备repo文件 [root@localhost yum.repos.d]# pwd /etc/yum.repos.d [r ...
- 【Source Insight 】之marco学习笔记1
我们学习编程语言都是从Hello World!,现在我们学习marco也不例外 打开C:\Users\%USERPROFILE%\Documents\Source Insight 4.0\Projec ...
- 2018SDIBT_国庆个人第四场
A - A 这题很巧妙啊,前两天刚好做过,而且就在博客里 Little C Loves 3 I time limit per test 1 second memory limit per test ...
- Android Uri获取真实路径以及文件名的方法【转】
原文地址:https://blog.csdn.net/MikoGodZd/article/details/50979653 在Android 编程中经常会用到uri转化为文件路径 下面是4.4后通过U ...
- Android DevArt4:IntentFilter学习及深入~问题描述:在不指定具体action前提下,如果有两个以上的Activity,具有完全相同的intent-filter,项目同步是否会出现异常?程序运行是否会崩溃?
概述:GitHub IntentFilter意图过滤器,三种匹配规则:action.category.data 重点:过滤规则中必须设置 '<category android:name=&quo ...
- django 认证系统--2
使用django的认证系统 User 对象 User是认证系统的核心.典型代表是用户和你的站点进行交互还有限制访问.注册用户等等.django认证框架中,只存在一个User类,像'superuser' ...
- Hibernate 再接触 关系映射 一对一单向外键关联
对象之间的关系 数据库之间的关系只有外键 注意说关系的时候一定要反面也要说通 CRUD 数据库之间设计 主键关联 单向的外键关联 中间表 一对一单向外键关联 Husband.java package ...