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发送Email方法实例
Aug 21 Python
Python中set与frozenset方法和区别详解
May 23 Python
python验证码识别教程之利用滴水算法分割图片
Jun 05 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
python和shell监控linux服务器的详细代码
Jun 22 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
pytorch中的自定义数据处理详解
Jan 06 Python
Python 如何测试文件是否存在
Jul 31 Python
Python基于callable函数检测对象是否可被调用
Oct 16 Python
UI自动化定位常用实现方法代码示例
Oct 27 Python
基于Python实现流星雨效果的绘制
Mar 18 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
php上传图片类及用法示例
2016/05/11 PHP
详解thinkphp中的volist标签
2018/01/15 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
通过隐藏option实现select的联动效果
2009/11/10 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
Python中作用域的深入讲解
2018/12/10 Python
python实现整数的二进制循环移位
2019/03/08 Python
python函数与方法的区别总结
2019/06/23 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
美国紧身牛仔裤品牌:NYDJ
2017/05/24 全球购物
Android笔试题总结
2014/11/29 面试题
就业协议书的作用
2014/04/11 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
夏洛特的网观后感
2015/06/15 职场文书
2015年教师节主持词
2015/07/03 职场文书
python数字图像处理:图像的绘制
2022/06/28 Python