并发编程(Process对象的join方法)(
一、 Process对象的join方法
在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况
情况一:在主进程的任务与子进程的任务彼此独立的情况下,主进程的任务先执行完毕后,主进程还需要等待子进程执行完毕,然后统一回收资源。
情况二:如果主进程的任务在执行到某一个阶段时,需要等待子进程执行完毕后才能继续执行,就需要有一种机制能够让主进程检测子进程是否运行完毕,在子进程执行完毕后才继续执行,否则一直在原地阻塞,这就是join方法的作用
阻塞当前进程,直到调用join方法的那个进程执行完,再继续执行当前进程。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
from multiprocessing import Process def task(name):
print('%s is runing' % name)
time.sleep(1)
print('%s is done' % name) if __name__ == '__main__':
p1 = Process(target=task, args=('xiaojiu',))
p2 = Process(target=task, args=('hh',))
p3 = Process(target=task, args=('wawa',)) p1.start()
p1.join() #这里xiaojiu 执行完毕之后才会执行其他进程
p2.start()
p3.start()
print('主进程') #输出 xiaojiu is runing
xiaojiu is done
主进程
hh is runing
wawa is runing
hh is done
wawa is done
二、 Process对象的其他属性或方法
进程对象的其他方法一:terminate与is_alive
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
from multiprocessing import Process def task(name):
print('%s is runing' % name)
time.sleep(1)
print('%s is done' % name) if __name__ == '__main__':
p1 = Process(target=task, args=('xiaojiu',))
p2 = Process(target=task, args=('hh',),name=('子进程2')) #改变进程名称
p3 = Process(target=task, args=('wawa',)) p1.start()
# p1.join() #这里xiaojiu 执行完毕之后才会执行其他进程
p1.terminate() #关闭进程,不会立即关闭,因为关闭的是进程信号。
print(p1.is_alive()) #查看是否存活
print(p1.name) #可以查看进程的名称 # Process-1
print(p2.name) #子进程2
print(p3.name)# Process-3 p2.start()
p3.start()
print('主进程') #输出 True
Process-1
子进程2
Process-3
主进程
hh is runing
wawa is runing
hh is done
wawa is done
并发编程(Process对象的join方法)(的更多相关文章
- 并发编程---Process对象的其他属性或方法
Process对象的其他属性或方法 #join方法 from multiprocessing import Process import time,os ''' 需求:让主进程等着子进程运行完毕,才能 ...
- Java并发编程--多线程中的join方法详解
Java Thread中, join()方法主要是让调用该方法的thread在完成run方法里面的部分后, 再执行join()方法后面的代码 例如:定义一个People类,run方法是输出姓名年龄. ...
- 并发编程之多线程基础-join方法及优先级(五)
join()方法作用 当在主线程当中执行到t1.join()方法时,就认为主线程应该把执行权让给t1 优先级 现代操作系统基本采用时分的形式调度运行的线程,线程分配得到的时间片的多少决定了线程使用处理 ...
- python 并发编程 多进程 Process对象的其他属性方法 join 方法
一 Process对象的join方法 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一: 在主进程的任务与子进程的任务彼此独立的情况下 ...
- 并发编程 Process 互斥锁
进程理论 程序与进程的区别 ''' 程序不是存在硬盘上的代码,相对来说是静态的 进程表示程序在执行的过程,是动态的 ''' 进程的调度 先来先服务调度算法 '''对长作业有利,对短作业无益''' 短作 ...
- ☕【Java技术指南】「并发编程专题」Fork/Join框架基本使用和原理探究(基础篇)
前提概述 Java 7开始引入了一种新的Fork/Join线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行. 我们举个例子:如果要计算一个超大数组的和,最简单的做法是用一个循环在一 ...
- Python并发编程-进程的几个方法
join()方法 from multiprocessing import Process import time def func(arg1,arg2): print('*'*arg1) time.s ...
- Go -- 并发编程的两种限速方法
引子 golang提供了goroutine快速实现并发编程,在实际环境中,如果goroutine中的代码要消耗大量资源时(CPU.内存.带宽等),我们就需要对程序限速,以防止goroutine将资源耗 ...
- golang并发编程的两种限速方法
引子 golang提供了goroutine快速实现并发编程,在实际环境中,如果goroutine中的代码要消耗大量资源时(CPU.内存.带宽等),我们就需要对程序限速,以防止goroutine将资源耗 ...
随机推荐
- JAVA基础之this关键之理解
突然觉得有几个知识点需要先复习一下 1.引用和对象并不一定要同时存在,可以只有引用,没有对象 :比如声明String a;如果非得提供一个比喻,可以用电视遥控器和电视来做比喻,遥控器比喻引用,电视 ...
- 智能BPOS小票模板字体的使用
关于伯俊智能BPOS零售小票模板的设置,常用字体"黑体"."宋体"."Arial"这几个字体,在设置的时候看似没有问题, 但是在正真使用打印 ...
- 震惊!java中日期格式化的大坑!
前言 我们都知道在java中进行日期格式化使用simpledateformat.通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中微小的坑吗? yyyy 和 YYYY 示例代码 @Test ...
- 2021年了,C 语言会被淘汰吗?
一年365天,总有那么几百天听到有人说"C语言过时了""C语言要被时代淘汰了",那么真的会被淘汰吗? C 语言发布于 1972 年,到2021年已经有49年的历 ...
- 获取微信Token值
/** * 获取Token值 * @param $corpid * @param $corpsecret * @return mixed * @author 宁佳兵 <meilijing.nin ...
- MySQL45讲:一条update语句是怎样执行的
首先创建一张表: create table T(ID int primary key,c int); 如果要更新ID=2这行+1:应该这样写 update T set c=c+1 where ID=2 ...
- java8 stream api流式编程
java8自带常用的函数式接口 Predicate boolean test(T t) 传入一个参数返回boolean值 Consumer void accept(T t) 传入一个参数,无返回值 F ...
- 基于numpy.einsum的张量网络计算
张量与张量网络 张量(Tensor)可以理解为广义的矩阵,其主要特点在于将数字化的矩阵用图形化的方式来表示,这就使得我们可以将一个大型的矩阵运算抽象化成一个具有良好性质的张量图.由一个个张量所共同构成 ...
- 【Oracle】查看oracle用户相关权限
系统权限 SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'CHAXUN' UNION ALL SELECT * FROM DBA_SYS_PRIVS WHER ...
- win10打开IIS服务并发布网站
1.打开控制面板 win+x后点击控制面板 2.点击程序集下边的解除安装程式 3.点击开启或关闭windows功能 4.找到Internet information services并勾选前面的复选框 ...