标签(空格分隔): 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对象的其他属性:的更多相关文章

  1. 并发编程---Process对象的其他属性或方法

    Process对象的其他属性或方法 #join方法 from multiprocessing import Process import time,os ''' 需求:让主进程等着子进程运行完毕,才能 ...

  2. 并发编程 - 进程 - 1.开启子进程的两种方式/2.查看pid/3.Process对象的其他属性或方法/4.守护进程

    1.开启子进程的两种方式: # 方式1: from multiprocessing import Process import time def task(name): print('%s is ru ...

  3. Day9 进程理论 开启进程的两种方式 多进程实现并发套接字 join方法 Process对象的其他属性或者方法 守护进程 操作系统介绍

    操作系统简介(转自林海峰老师博客介绍) #一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 #二 多道技术: 1.产生背景: ...

  4. python 并发编程 多进程 Process对象的其他属性方法 join 方法

    一 Process对象的join方法 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一: 在主进程的任务与子进程的任务彼此独立的情况下 ...

  5. python 并发编程 多进程 Process对象的其他属性方法 terminate与is_alive name pid 函数

    进程对象的其他方法一: terminate与is_alive is_alive()  立刻查看的子进程结果 是否存活 from multiprocessing import Process impor ...

  6. 进程之 Process join方法其他属性与进程Queue

    Process join方法 以及其他属性 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一:在主进程的任务与子进程的任务彼此独立的情 ...

  7. 并发编程(Process对象的join方法)(

    一. Process对象的join方法 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一:在主进程的任务与子进程的任务彼此独立的情况下 ...

  8. 8 并发编程-(线程)-多线程与多进程的区别&Thread对象的其他属性或方法

    1.开启速度  在主进程下开启线程比 开启子进程快 # 1 在 主进程下开启线程 from threading import Thread def work(): print('hello') if ...

  9. 并发编程 - 线程 - 1.开启线程的两种方式/2.进程与线程的区别/3.Thread对象的其他属性或方法/4.守护线程

    1.开启线程的两种方式: 进程,线程: 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合)而线程才是cpu上的执行单位) 1.同一个进程内的多个线程共享该进程内的地址资源 2.创建线 ...

随机推荐

  1. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  2. eclipse添加缺失的包/src/main/resource

    右键>>build path>>source 添加文件夹

  3. CSS3 过渡动画

    实现如下效果:当鼠标移动到图片上是图片有类似于放大镜放大的效果 transition : CSS属性 时间 当transition中监测的css属性发生变化时,会触发动画 .img_box img{ ...

  4. Web移动端布局

    说到移动端,不得不提适配问题,因为现如今市面上移动设备的分辨率大小不同,显然咱们常用的px单位在这个时候就有些不太灵光了,为此,css3出了一个新单位——rem,rem是移动端神器,它完美解决了分辨率 ...

  5. 浅析STM32之usbh_def.H

    [温故而知新]类似文章浅析USB HID ReportDesc (HID报告描述符) 现在将en.stm32cubef1\STM32Cube_FW_F1_V1.4.0\Middlewares\ST\S ...

  6. mui集成百度ECharts的统计图表以及清空释放图表

    echarts官网地址: http://echarts.baidu.com/index.html 更换主题颜色: // 图表清空------------------- mychart.clear(); ...

  7. Unicode UTF8 UTF16 urlencode base64

    Unicode:是一个字符集,每个字符对应一个唯一的unicode编码,一般是16位. UTF8是针对Unicode的编码方式,因为如果每个字符都用unicode的编码存储的话会很浪费空间,比如说as ...

  8. Delphi 使用MD5 比对文件

    使用MD5的方法比对CXimage里图片是否改变: Delphi7实现方法: uses IdHashMessageDigest function TForm1.GetImageMD5(cxImage: ...

  9. spark 集成elasticsearch

    pyspark读写elasticsearch依赖elasticsearch-hadoop包,需要首先在这里下载,版本号可以通过自行修改url解决. """ write d ...

  10. Raft算法和Gossip协议

    简单介绍下集群数据同步,集群监控用到的两种常见算法. Raft算法 raft 集群中的每个节点都可以根据集群运行的情况在三种状态间切换:follower, candidate 与 leader.lea ...