【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秒之后不管该线程是否结束,就开始执行后面的主进程。
目录
相关文章
|
3月前
|
存储 IDE 编译器
解密 Python 函数的实现原理
解密 Python 函数的实现原理
28 0
|
8月前
|
Python
【Python操作基础】——for语句用法
【Python操作基础】——for语句用法
|
8月前
|
Python
Python yield 关键字的作用?
Python yield 关键字的作用?
52 0
|
8月前
|
Python
python 多线程怎么传递参数
在Python多线程中,通过`Thread`类创建线程并传参。示例:定义函数`worker(num)`,在循环中创建5个线程,每个线程调用`worker`并传入`i`作为参数。参数需以元组形式传给`args`,如`args=(i,)`。
119 0
|
8月前
|
程序员 测试技术 数据处理
Python中的装饰器应用与实现Python并发编程之协程与多线程对比分析
在Python编程中,装饰器是一种强大的工具,能够简洁而优雅地扩展函数或类的功能。本文将深入探讨Python中装饰器的原理、应用场景以及实现方法,帮助读者更好地理解和运用这一重要的编程概念。 本文将从Python并发编程的角度出发,对比分析协程与多线程两种并发处理方式的优缺点及适用场景,帮助读者更好地选择适合自己项目的并发方案。
|
8月前
|
API 调度 Python
Python 高级主题:解释 Python 中的协程(Coroutine)是什么?
Python 高级主题:解释 Python 中的协程(Coroutine)是什么?
59 1
|
存储 Python
【Python】学习Python常用函数作用和用法
【Python】学习Python常用函数作用和用法
52 0
|
Python
python:循环用法
python:循环用法
81 0
|
Python
Python|yield的解析及用法
Python|yield的解析及用法
266 0
|
开发者 Python
python yield 用法详解
python yield 用法详解