zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

Python多线程编程 函数 用法 Join
2023-09-14 08:57:29 时间
在学习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秒之后不管该线程是否结束,就开始执行后面的主进程。
获取Python函数信息的方法 Python的反射机制可以动态获取对象信息以及动态调用对象,本文介绍如何获取对象中的函数注释信息以及参数信息。
【Python】15_初学函数 1、两种输出的小数位控制 # num = 10 # def anum(): # num = 20 # print(num) # anum() num = 3.14 print( %.3f % num) # f {变量:.nf} print(f {num:.3f} ) # 3.140 num1 = 1 # 00000001 print( %6d % num1) print( %06d % num1) # 000001 print(f {num1:06d} ) # 000001 (1)求和
Python中函数参数传递方法*args, **kwargs,还有其他 本文将讨论Python的函数参数。我们将了解*args和**kwargs,/和*的都是什么,虽然这个问题是一个基本的python问题,但是在我们写代码时会经常遇到,比如timm中就大量使用了这样的参数传递方式。
Python入门教程:什么闭包函数 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。 提示:之前我们都是通过参数将外部的值传给函数,闭包提供了另外一种思路,包起来喽,包起呦,包起来哇。