https://www.cnblogs.com/fnng/p/3670789.html
做一下摘录(包括评论区里面指出的问题):
import threading
from time import ctime, sleep
def music(func):
for i in range(2):
print("I started listening to %s. %s" % (func, ctime()))
sleep(1)
print("I finished listening to %s. %s" % (func, ctime()))
def movie(func):
for i in range(2):
print("I started to watch %s! %s" % (func, ctime()))
sleep(5)
print("I finished watching %s! %s" % (func, ctime()))
threads = []
t1 = threading.Thread(target=music, args=('爱情买卖',))
threads.append(t1)
t2 = threading.Thread(target=movie, args=('阿凡达',))
threads.append(t2)
if __name__ == '__main__':
for t in threads:
t.setDaemon(True) # 守护线程,需要在start之前设置;守护线程的意思就是,被守护的挂掉了他也就走了,比如背景音乐
t.start()
for t in threads:
t.join()
# 为什么要写在另一个循环里面呢?
# 这两个线程中,如果第一个比第二个快,那就是先在第一个线程中阻塞,第二个线程来了再继续阻塞;
# 如果第二个比第一个快,那就是第一个线程中直接阻塞到头了,第二个线程执行join的时候已经做完了,不用阻塞了
print("all over %s" % ctime())
- 守护线程,需要在start之前设置;守护线程的意思就是,被守护的挂掉了他也就走了,比如背景音乐
- join为什么要写在另一个循环里面呢?为什么不在第一个循环里面直接写上呢?
- 这两个线程中,如果第一个比第二个快,那就是先在第一个线程中阻塞,第二个线程来了再继续阻塞;
- 如果第二个比第一个快,那就是第一个线程中直接阻塞到头了,第二个线程执行join的时候已经做完了,不用阻塞了
网友评论