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 列表(List)操作方法详解
Mar 11 Python
用python + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
python实现随机梯度下降(SGD)
Mar 24 Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
python数据持久存储 pickle模块的基本使用方法解析
Aug 30 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
如何运行带参数的python脚本
Nov 15 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
Python实战之实现康威生命游戏
Apr 26 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/05/10 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
php实现获取及设置用户访问页面语言类
2014/09/24 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
详解Python中的序列化与反序列化的使用
2015/06/30 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
2016/06/16 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
Python实现的堆排序算法示例
2018/04/29 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
干部下基层实施方案
2014/03/14 职场文书
三八妇女节活动总结
2014/05/04 职场文书
电钳工人个人求职信
2014/05/10 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
各国货币符号大全
2022/02/17 杂记