python 多线程中join()的作用


Posted in Python onOctober 29, 2020

一 前言

温习python 多进程语法的时候,对 join的理解不是很透彻,本文通过代码实践来加深对 join()的认识。

multiprocessing 是python提供的跨平台版本的多进程模块。multiprocessing可以充分利用多核,提升程序运行效率。multiprocessing支持子进程,通信和共享数据,执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。不过今天重点了解 join。后续文章会逐步学习介绍其他组件或者功能。

二 动手实践

join()方法可以在当前位置阻塞主进程,带执行join()的进程结束后再继续执行主进程的代码逻辑。

# encoding: utf-8
"""
author: yangyi@youzan.com
time: 2019/7/30 11:20 AM
func:
"""

from multiprocessing import Process
import os
import time

def now():
  return str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))


def func_1(name):
  print(now() + ' Run child process %s (%s)...' % (name, os.getpid()))
  time.sleep(4)
  print(now() + ' Stop child process %s (%s)...\n' % (name, os.getpid()))


def func_2(name):
  print(now() + ' Run child process %s (%s)...' % (name, os.getpid()))
  time.sleep(8)
  print(now() + ' hello world!')
  print(now() + ' Stop child process %s (%s)...\n' % (name, os.getpid()))


if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p1.start()
  p2.start()
  p1.join()
  p2.join()
  print now() + ' Process end .'

输出结果

python 多线程中join()的作用

结果显示

主进程的 Process end .是在func1 和func2 结束之后才打印出来的。

2.2 去掉 join() 函数

if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p1.start()
  p2.start()
  print now() + ' Process end .'

结果如下:

python 多线程中join()的作用

2.3 去掉func_2 的 join()

if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p1.start()
  p2.start()
  p1.join() ### 在p1 执行完之后 。不等待p2 执行,主进程结束。
  print now() + ' Process end .'

结果如下:

python 多线程中join()的作用

结果显示主线程 "Process end"在func_1 执行结束之后输出而没有等待func_2 执行完毕。

2.4 小结

利用多线程时,一般都先让子线程调用start() ,然后再去调用join(),让主进程等待子进程结束才继续走后续的逻辑。

思考题

能不能每个子进程调用start() 之后,然后直接调用join() 类似:

p1.start()p1.join()p2.start()p2.join()

以上就是python 多线程中join()的作用的详细内容,更多关于python 多线程join()的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python网络编程学习笔记(一)
Jun 09 Python
python将字符串转换成数组的方法
Apr 29 Python
浅谈Python中列表生成式和生成器的区别
Aug 03 Python
举例讲解Linux系统下Python调用系统Shell的方法
Nov 07 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
django框架防止XSS注入的方法分析
Jun 21 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
详解Python openpyxl库的基本应用
Feb 26 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
浅谈Python协程asyncio
Jun 20 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 #Python
python 实现音频叠加的示例
Oct 29 #Python
详解python的super()的作用和原理
Oct 29 #Python
Python生成pdf目录书签的实例方法
Oct 29 #Python
利用python清除移动硬盘中的临时文件
Oct 28 #Python
python实现一个简单RPC框架的示例
Oct 28 #Python
pycharm永久激活超详细教程
Oct 29 #Python
You might like
关于php循环跳出的问题
2013/07/01 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
PHP PDO操作总结
2014/11/17 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
dataframe设置两个条件取值的实例
2018/04/12 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
Python测试模块doctest使用解析
2019/08/10 Python
浅谈python锁与死锁问题
2020/08/14 Python
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
外语专业毕业生个人的自荐信
2013/11/19 职场文书
个人现实表现材料
2014/02/04 职场文书
商务助理求职信范文
2014/04/20 职场文书
房地产活动策划方案
2014/05/14 职场文书
先进员工获奖感言
2014/08/14 职场文书
励志演讲稿500字
2014/08/21 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
水浒传读书笔记
2015/06/25 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL