今天开始准备学习threading这个库啦,毕竟面试的时候少不了问多进程,多线程的,所以还是要准备准备的,嘻嘻。
今天理解最基本的线程运行和join的使用
我就直接贴代码了,跑下代码,看下注释就明白了。
import threading
import time
def music(func):
for i in range(2):
sleep_seconds = 4
print(f"Begin listen to {func, time.ctime()}")
time.sleep(sleep_seconds)
print(f"过了{sleep_seconds}s")
print(f"end listening at the music: {func, time.ctime()} ")
def movie(func):
for i in range(2):
sleep_seconds = 5
print(f"begin watching at the{func, time.ctime()} ")
time.sleep(sleep_seconds)
print(f'过了{sleep_seconds}s')
print(f"end watching at the movie: {func, time.ctime()}")
if __name__ == '__main__':
threads = []
t1 = threading.Thread(target=music, args=['七里香', ])
t2 = threading.Thread(target=movie, args=['阿甘正传', ])
threads.append(t1)
threads.append(t2)
print("对于join的理解,三个小例子")
"""
第一种情况
"""
# print("下面是三个小例子,方便理解")
# print("第一种:循环中按顺序执行,启动music线程,然后阻塞,然后启动movie线程,在阻塞,最后在结束主进程")
# for t in threads:
# t.start()
# t.join()
# print(f"all over {time.ctime()}")
# print("最终结果就是,必须等到music放完了才会看moive,然后回到主进程")
"""
第二种
"""
# print("第二种: 循环中启动两个线程,然后阻塞music线程,意思是必须等music线程结束后才会执行主进程。")
# print("你可以看到当music执行完成后,all over被打印了出来")
# for t in threads:
# t.start()
# t1.join()
# print(f"all over {time.ctime()}")
"""
第三种
"""
print("第三种:跟第二种一样,阻塞movie进程,必须等到movie放完了,才会执行主进程")
for t in threads:
t.start()
t2.join()
print(f"all over {time.ctime()}")
发现不错的文章
明天
- 理解python中的全局解释锁。
- 测测python中io密集型和计算机密集型多线程的差异。