关于python线程threading使用的学习笔记

至于线程和进程,看了好多网文,但各有不同论断,还没太明白究竟如何。

(有博文初看不错,待细看学习:https://blog.csdn.net/weixin_42134789/article/details/82992326)

 

看代码帮助理解方法功能:

import threading
import time
threading.active_count() #获取已激活的线程数
threading.enumerate() #查看所有线程信息
threading.current_thread() #查看现在正在运行的线程

def thread_job():
    print('T1 start\n')
    #让 T1 线程工作的耗时增加:
    for i in range(10):
        time.sleep(0.1)  #任务间隔0.1s
    print('T1 finsh\n')
            
def main():
    #添加线程(定义一个线程),threading.Thread()接收参数target代表这个线程要完成的任务,需自行定义
    added_thread=threading.Thread(target=thread_job,name='T1')  #此处thread_job后面不带括号
    added_thread.start() #让线程开始工作
    print('all done\n')
    
if __name__ == '__main__':
    main()

输出:

T1 start

all done

T1 finsh

本想:

T1 start
T1 finish
all done

计算不等人.

可用join帮助控制执行顺序:

def main():
    #添加线程(定义一个线程),threading.Thread()接收参数target代表这个线程要完成的任务,需自行定义
    added_thread=threading.Thread(target=thread_job,name='T1')
    added_thread.start() #让线程开始工作
    added_thread.join() #在启动线程后,调用join
    print('all done\n')

又例:join控制执行顺序:
(1)未加join:

(2)加join后:

join()控制,让已经start()了的线程,运行完之后,再运行其后的线程

如果:

显示结果如下:


 

贴出 代码便于复制验证:

import threading
import time
def T1_job():
    print("T1 start\n")
    for i in range(10):
        time.sleep(0.1)
    print("T1 finish\n")
    global T1_end
    T1_end=time.time()
    print('T1 结束时间:{}'.format(T1_end))
    
def T2_job():
    print("T2 start\n")
    for i in range(10):
        time.sleep(0.1)
    print("T2 finisth\n")
    global t3
    t3=time.time()
    print('t2 结束时间:{}'.format(t3))
    
thread_1=threading.Thread(target=T1_job,name='T1')
thread_2=threading.Thread(target=T2_job,name='T2')

thread_1.start() # start T1
t1=time.time()
print('T1开始时间:',t1)

thread_2.start() # start T2
t4=time.time()
print('T2开始时间:{}'.format(t4))

thread_2.join() # join for T2
thread_1.join() # join for T1
print("all done\n")
print('线程1运行时长:',T1_end-t1)
print('线程2运行时长:',t3-t4)
T1 start
T1开始时间:
 1592942923.562432
T2 start
T2开始时间:1592942923.5654247
T1 finish
T1 结束时间:1592942924.5682905
T2 finisth
t2 结束时间:1592942924.5732422
all done
线程1运行时长: 1.0058584213256836
线程2运行时长: 1.0078175067901611

 

如若,在join()之前都已start(),则join语句的先后顺序,不决定运算结果秩序,起决定作用的还是看谁运行结束。所以,通常推荐采用如下这种1221的V型排布:

thread_1.start() # start T1
thread_2.start() # start T2
thread_2.join() # join for T2
thread_1.join() # join for T1
print("all done\n")

"""
T1 start
T2 start
T2 finish
T1 finish
all done
"""

 


参考: https://morvanzhou.github.io/tutorials/python-basic/threading/3-join/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值