Python多线程

https://www.cnblogs.com/fnng/p/3670789.html

做一下摘录(包括评论区里面指出的问题):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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:
s(True) # 守护线程,需要在start之前设置;守护线程的意思就是,被守护的挂掉了他也就走了,比如背景音乐
t.start()

for t in threads:
t.join()
# 为什么要写在另一个循环里面呢?
# 这两个线程中,如果第一个比第二个快,那就是先在第一个线程中阻塞,第二个线程来了再继续阻塞;
# 如果第二个比第一个快,那就是第一个线程中直接阻塞到头了,第二个线程执行join的时候已经做完了,不用阻塞了

print("all over %s" % ctime())
  • 守护线程,需要在start之前设置;守护线程的意思就是,被守护的挂掉了他也就走了,比如背景音乐
  • join为什么要写在另一个循环里面呢?为什么不在第一个循环里面直接写上呢?
    • 这两个线程中,如果第一个比第二个快,那就是先在第一个线程中阻塞,第二个线程来了再继续阻塞;
    • 如果第二个比第一个快,那就是第一个线程中直接阻塞到头了,第二个线程执行join的时候已经做完了,不用阻塞了