【python】多线程编程中join函数的用法

简介: 在学习python 多线程编程的时候,一定会使用一个函数join,本章内容通过例子讲述join 在多线程编程中有哪些作用。本文使用两段代码演示其功能代码一 import threading, timedef now() :    return str( time.
在学习python 多线程编程的时候,一定会使用一个函数join,本章内容通过例子讲述join 在多线程编程中有哪些作用。
本文使用两段代码演示其功能
代码一 
import threading, time
def now() :
    return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )
def func1():
    print 'start func1: ' + now() + "\n"
    time.sleep(3)
    print 'stop func1: ' + now() + "\n"
def func2():
    print 'start func2: ' + now() + "\n"
    time.sleep(5)
    print 'stop func2: ', now() + "\n"
thtsk = []
thread1 = threading.Thread(target = func1)
thread1.start()
thtsk.append(thread1)
thread2 = threading.Thread(target = func2)
thread2.start()
thtsk.append(thread2)
print 'start join: ' + now() + "\n"
for thd in thtsk:
    thd.join()
print 'end join: ' + now() + "\n"
该样例中使用了两个线程thread1,thread2,分别执行func1,func2,
其中
func1 的动作是打印开始 时间 ,sleep 3s,打印结束时间
func2 的动作是打印开始 时间 ,sleep 5s,打印结束时间。
后面使用start() 方法同步开始执行两个线程,然后开始循环调用两个线程的join()方法,join不加参数的时候结果如下:

解释:
     func1 在3s 之后结束,fun2 在5s之后结束,并且最后输出 【end join】
代码二
import threading, time
def now() :
    return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )
def func1():
    print 'start func1: ' + now() + "\n"
    time.sleep(3)
    print 'stop func1: ' + now() + "\n"
def func2():
    print 'start func2: ' + now() + "\n"
    time.sleep(8)
    print 'stop func2: ', now() + "\n"
thtsk = []
thread1 = threading.Thread(target = func1)
thread1.start()
thtsk.append(thread1)
thread2 = threading.Thread(target = func2)
thread2.start()
thtsk.append(thread2)
print 'start join: ' + now() + "\n"
for thd in thtsk:
    thd.join(2)
print 'end join: ' + now() + "\n"
在join()函数添加参数 2 ,表示等待两秒,结果如下

解释:
     两个线程开始并发执行,先执行func1的join(2),等func1执行2s后,执行func2的join(2),等线程2执行2s后,开始执行主进程,打印「end join」,1s之后fun2执行结束。
这里join(2)标示2s之后不管当前线程是否执行完成,都会处理下一个线程。

总结一下:
1 join方法的作用是阻塞主进程无法执行join以后的语句,专注执行多线程,必须等待多线程执行完毕之后才能执行主线程的语句。
2 多线程多join的情况下,依次执行各线程的join方法,前一个结束之后,才能执行后一个。
3 无参数,则等待到该线程结束,才开始执行下一个线程的join。
4 设置参数后,则等待该线程N秒之后不管该线程是否结束,就开始执行后面的主进程。
目录
相关文章
|
7天前
|
Python
python 多线程怎么传递参数
在Python多线程中,通过`Thread`类创建线程并传参。示例:定义函数`worker(num)`,在循环中创建5个线程,每个线程调用`worker`并传入`i`作为参数。参数需以元组形式传给`args`,如`args=(i,)`。
8 0
|
2月前
|
程序员 测试技术 数据处理
Python中的装饰器应用与实现Python并发编程之协程与多线程对比分析
在Python编程中,装饰器是一种强大的工具,能够简洁而优雅地扩展函数或类的功能。本文将深入探讨Python中装饰器的原理、应用场景以及实现方法,帮助读者更好地理解和运用这一重要的编程概念。 本文将从Python并发编程的角度出发,对比分析协程与多线程两种并发处理方式的优缺点及适用场景,帮助读者更好地选择适合自己项目的并发方案。
|
6月前
|
Python
python:循环用法
python:循环用法
|
8月前
|
Python
【从零学习python 】27. Python 函数的使用及嵌套调用
【从零学习python 】27. Python 函数的使用及嵌套调用
43 0
|
10月前
|
Python
Python|yield的解析及用法
Python|yield的解析及用法
188 0
|
12月前
|
Python
原来Python的协程有2种实现方式
在 Python 中,协程(Coroutine)是一种轻量级的并发编程方式...
271 0
|
开发者 Python
python yield 用法详解
python yield 用法详解
|
关系型数据库 MySQL 数据库连接
Python with关键字原理详解
对于正确的处理涉及到异常的资源管理时,需要使用 `try/finally` 代码结构,这样的结构一多会导致整体代码结构 **很臃肿繁琐,不易读、不美观**,因此在 **Python2.6** 版本推出 `with` 关键字。
|
存储 Python
yield 关键字在 Python 中的用途是什么?
要了解其yield作用,必须了解什么是 生成器。而且,了解生成器之前,必须了解 _iterables_。
207 0
|
Python
python中join()函数用法(有实例)
python中join()函数用法(有实例)
256 0