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编程线性回归代码示例
Dec 07 Python
Python基础教程之利用期物处理并发
Mar 29 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
详解Django中间件的5种自定义方法
Jul 26 Python
Python BS4库的安装与使用详解
Aug 08 Python
python抖音表白程序源代码
Apr 07 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
python统计指定目录内文件的代码行数
Sep 19 Python
centos7中安装python3.6.4的教程
Dec 11 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
学python爬虫能做什么
Jul 29 Python
只用40行Python代码就能写出pdf转word小工具
May 31 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
js列举css中所有图标的实现代码
2011/07/04 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
浅谈javascript的调试
2015/01/28 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
jQuery动态添加
2016/04/07 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
学生干部的自我评价分享
2014/01/18 职场文书
上班看电影检讨书
2014/02/12 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
端午节活动总结报告
2015/02/11 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers