线程,进程,协程等
python thread模块
线程有两种调用方式:
直接调用:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import threading import time def sayhi(num): print("threading - > %s"%num ) time.sleep(2) if __name__ == '__main__': t1 = threading.Thread(target=sayhi,args=(1,)) t2 = threading.Thread(target=sayhi,args=(2,)) t1.start() #启动线程 t2.start() #启动另一个线程 print(t1.getName()) print(t2.getName())
复制代码
1继承式调用:
复制代码
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120复制代码import threading import os import time class MyThread(threading.Thread): def __init__(self,num): threading.Thread.__init__(self) self.num = num def run(self): print("running on number : %s"%self.num) if __name__ == '__main__': t1 = MyThread(1) t2 = MyThread(2) t1.start() t2.start()复制代码复制代码互斥锁复制代码复制代码""" 一个进程下可以启动多个线程,多个线程共享父进程的内存空间,这也意味着 每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据, 会出现什么情况 """ import time import threading def AddNum(): global num #在每个线程中都获取这个全局变量 print("--get num:",num) time.sleep(2) num += 1 #对此公共变量进行+1操作 num = 10 #设置一个共享变量 threading_list = [] for i in range(10): t = threading.Thread(target=AddNum) t.start() # print(t) threading_list.append(t) for t in threading_list: print(t) t.join() print("final num:",num)复制代码正常来讲,这个num结果应该是0, 但在python 2.7上多运行几次,会发现,最后打印出来的num结果不总是0,
复制代码为什么每次运行的结果不一样呢? 哈,很简单,假设你有A,B两个线程,此时都 要对num 进行减1操作,
复制代码由于2个线程是并发同时运行的,所以2个线程很有可能同时拿走了num=100这个初始变量交给cpu去运算,
复制代码当A线程去处完的结果是99,但此时B线程运算完的结果也是99,两个线程同时CPU运算的结果再赋值给num变量后,
复制代码结果就都是99。那怎么办呢? 很简单,每个线程在要修改公共数据时,为了避免自己在还没改完的时候别人也来修改此数据,
复制代码可以给这个数据加一把锁, 这样其它线程想修改此数据时就必须等待你修改完毕并把锁释放掉后才能再访问此数据。
复制代码
复制代码未完待续。。。。。。
最后
以上就是沉默服饰最近收集整理的关于python自动化之路-day8的全部内容,更多相关python自动化之路-day8内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复