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中的Descriptor描述符学习教程
Jun 02 Python
pyQt4实现俄罗斯方块游戏
Jun 26 Python
Python2包含中文报错的解决方法
Jul 09 Python
使用Python横向合并excel文件的实例
Dec 11 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
Python ini文件常用操作方法解析
Apr 26 Python
python文件读取失败怎么处理
Jun 23 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 Python
python自动生成sql语句的脚本
Feb 24 Python
一起来学习Python的元组和列表
Mar 13 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
Terran历史背景
2020/03/14 星际争霸
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
发现的以前不知道的函数
2006/09/19 Javascript
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
聊聊Python中的pypy
2018/01/12 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
Python实现代码统计工具
2019/09/19 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
什么是Python中的顺序表
2020/06/02 Python
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
信息服务专业毕业生求职信
2014/03/02 职场文书
法律六进活动方案
2014/03/13 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
Python初识逻辑与if语句及用法大全
2021/08/07 Python