1使用join
from threading import Thread
def f1(n):
for i in range(n):
print('f1=',i)
print('1111111111')
def g2(n1,n2):
for i in range(n1,n2):
print('g2=', i)
print('22222222222')
if __name__ == "__main__":
for i in range(1,3):
print('start cycle ',i)
t1=Thread(target=f1,args=(i,))
t2 = Thread(target=g2, args=(5*i,5*(i+1)))
t1.start()
t2.start()
t1.join()
t2.join()
print('end cycle ', i)
结果为:
start cycle 1
f1= 0
1111111111
g2= 5
g2= 6
g2= 7
g2= 8
g2= 9
22222222222
end cycle 1
start cycle 2
f1= 0
f1= 1
1111111111
g2= 10
g2= 11
g2= 12
g2= 13
g2= 14
22222222222
end cycle 2
2不使用join
from threading import Thread
def f1(n):
for i in range(n):
print('f1=',i)
print('1111111111')
def g2(n1,n2):
for i in range(n1,n2):
print('g2=', i)
print('22222222222')
if __name__ == "__main__":
for i in range(1,3):
print('start cycle ',i)
t1=Thread(target=f1,args=(i,))
t2 = Thread(target=g2, args=(5*i,5*(i+1)))
t1.start()
t2.start()
print('end cycle ', i)
结果为(有多种结果):
start cycle 1
f1= 0
1111111111
g2= 5
end cycle 1
start cycle 2
g2= 6
f1= 0
g2= 7
f1= 1
1111111111
g2= 8
g2= 9
22222222222
g2= 10
end cycle 2
g2= 11
g2= 12
g2= 13
g2= 14
22222222222
由此可见join的作用就是阻塞,等待前面任务的结束再进行后续任务.t1.join(),t2.join()和t2.join(),t1.join()效果完全不一样.
join所完成的工作就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程在终止
参考:https://blog.csdn.net/u010339879/article/details/86506450 python3对多线程join的理解