一、线程
线程是操作系统中能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
#好处:
(1)易于调度。
(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
(3)开销少。创建线程比创建进程要快,所需开销很少
1.多线程之间共享数据时存在资源竞争问题,解决办法:互斥锁(越少越好)
2、互斥锁/线程锁
(1)、创建互斥锁对象:mutex = theading.Lock
(2)、上锁:mutex.acquire()
(3)、解锁:mutex.release()
3、创建线程:
(1)、导入theading包---->import theading
(2)、创建线程对象---->t1 = theading.Thead(target=子线程名/函数名,args=(1,),kwargs={“age”:12})
(3)、创建线程---->t1.start()
4、代码:
import threading
import time
#声明全局变量
gl_num = 0
#创建锁
suo = threading.Lock()
def dome1(num):
#声明gl_num是全局变量让后进行循环赋值
global gl_num
for i in range(num):
#上锁
suo.acquire()
gl_num += 1
#释放锁
suo.release()
print("dome1中gl_num:%d"%gl_num)
def dome2(num):
global gl_num
for i in range(num):
#上锁
suo.acquire()
gl_num += 1
#释放锁
suo.release()
print("dome2中gl_num:%d"%gl_num)
def main():
#查看此时创建的线程
# print(threading.enumerate())
d1 = threading.Thread(target=dome1,args=(1000000,)) #
d2 = threading.Thread(target=dome2,args=(1000000,))
# print(threading.enumerate())
#子线程开始创建
d1.start()
d2.start()
# print(threading.enumerate())
time.sleep(2)
print("main中gl_num:%d"%gl_num)
if __name__ == '__main__':
main()