线程

简介

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
37
38
39
40
41
42
43
44
45
# coding:utf-8

# thread_test

import random,time,threading

lists = ['python','django','tornado',
'flask','bs5','request','uvloop']

new_lists = []

def work():
if len(lists) == 0:
return
data = random.choice(lists)
lists.remove(data)
new_data = '%s_new' % data
new_lists.append(new_data)
time.sleep(2)

if __name__ == '__main__':
start = time.time()
t_list = []
for i in range(len(lists)):
# work()
t = threading.Thread(target=work)
t_list.append(t) # 列表里面装线程。
t.start()
for t in t_list:
t.join()

print('old list:',lists)
print('new list:',new_lists)
print('times is %s' %(time.time()-start))

# 开了很多个线程 一起start ,给他们套上一个阻塞保证线程全部结束主进程才结束,运行几乎是同步进行,一瞬间完成。

# 线程的结束一般依靠线程函数的自然结束;
# 也可以在线程函数中调用thread.exit(),
# 抛出SystemExit exception,达到退出线程的目的。

# 不像主进程一定要在 子进程结束后结束,主线程可以先运行完结束,子线程接着运行,直到运行完毕自然结束,也没关系。
# 当然最好还是 等子线程都运行完毕,主线程再完,好一点。