Thrading线程

单线程执行代码:

 1 import time
 2 
 3 
 4 def saySorry():
 5     print("测试代码")
 6     time.sleep(1)
 7 
 8 
 9 if __name__ == '__main__':
10     for i in range(5):
11         saySorry()

单线程下程序运行非常慢,且不能同一时间执行不同的功能。使用多线程后执行代码较快,且能同一时间完成多种功能(例如:同时接收和发送数据)

 1 import threading
 2 import time
 3 
 4 
 5 def test():
 6     print("测试代码")
 7     time.sleep(1)
 8 
 9 
10 if __name__ == '__main__':
11     for i in range(5):
12         t = threading.Thread(target=test)
13         t.start()   # 调用start方法后才会创建线程以及让这个线程开始运行

查看线程数量:通过查看threading调用enumerate方法的长度 来判断线程的数量

1 print("当前运行的线程数为:%d" %len(threading.enumerate())

线程执行代码的封装:

  如果使用多个线程去做同一件事情时,可以将线程执行代码进行封装,当需要执行相应代码时直接用封装的代码创建线程对象,然后调用start方法后即可执行。

 1 import threading
 2 import time
 3 
 4 
 5 class MyThred(threading.Thread):
 6     def run(self):
 7         for i in range(5):
 8             time.sleep(1)
 9             print("测试代码")
10 
11 
12 if __name__ == '__main__':
13     t = MyThred()
14     t.start()

多线程共享全局变量:

 1 from threading import Thread
 2 import time
 3 
 4 g_num = 100
 5 
 6 
 7 def work1():
 8     global g_num
 9     for i in range(3):
10         g_num += 1
11     print("___in worrk1,g_num is %d" % g_num)
12 
13 
14 def work2():
15     # global g_num
16     print("___in work2,g_num is %d" % g_num)
17 
18 
19 print("___线程创建之前,g_num is %d" % g_num)
20 
21 
22 t1 = Thread(target=work1)
23 t1.start()
24 
25 # 延迟一会,保证t1线程中的事情做完
26 time.sleep(0.5)
27 
28 t2 = Thread(target=work2)
29 t2.start()

  执行结果:

1 ___线程创建之前,g_num is 100
2 ___in worrk1,g_num is 103
3 ___in work2,g_num is 103

补充:threading.Thread()括号内除了传入target=方法名外,还可以用 args=()传入实参到要执行的方法内部,args必须是元组。

 1 from threading import Thread
 2 import time
 3 
 4 
 5 def work1(temp):
 6     temp.append(33)
 7     print("___in work1___", temp)
 8 
 9 
10 def work2(temp):
11     print("___in work2___", temp)
12 
13 
14 g_nums = [11, 22]
15 
16 # target指定将来这个线程去哪个函数执行代码
17 # args指定将来调用函数的时候 传递什么数据过去
18 t1 = Thread(target=work1, args=(g_nums,))    # args传入的是一个元组
19 t1.start()
20 time.sleep(1)
21 t2 = Thread(target=work2, args=(g_nums,))
22 t2.start()

  执行结果:

1 ___in work1___ [11, 22, 33]
2 ___in work2___ [11, 22, 33]

猜你喜欢

转载自www.cnblogs.com/zuzhuangmengxiang/p/12663784.html