至于线程和进程,看了好多网文,但各有不同论断,还没太明白究竟如何。
(有博文初看不错,待细看学习: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/