Python3 多线程
实现方式一:
import time
import threading
def main():
print("啦啦啦")
time.sleep(3)
if __name__ == "__main__":
for i in range(5):
t = threading.Thread(target=main) #创建线程对象
t.start() #启动线程
print(threading.enumerate()) #查看当前正在运行的所有线程, 返回一个元组
实现方式二:
import time
import threading
#定义类 , 继承Thread类, 重写run方法
class MyThread(threading.Thread):
#重写run方法
def run(self):
for i in range(3):
time.sleep(1)
print(self.name + "循环第 %d 次" % i) #输出线程名称
if __name__ == "__main__":
t = MyThread()
t.start() #自动调用run方法 (只开启一个子线程)
互斥锁:
import threading
g_num = 0
def fun1(num):
global g_num
for i in range(num):
# 如果线程运行到此处之前没有上锁,那么此时上锁成功
# 如果之前上过锁了,那么会阻塞在这里,等到锁释放,才会在这里重新上锁(锁是唯一的)
lock.acquire()
g_num += 1
#解锁
lock.release()
print("fun1 g_num = %d" % g_num)
def fun2(num):
global g_num
for i in range(num):
lock.acquire()
g_num += 1
lock.release()
print("fun1 g_num = %d" % g_num)
#创建互斥锁,默认是没有上锁的
lock = threading.Lock()
def man():
t1 = threading.Thread(target=fun1, args=(1000000,)) # 多个线程共享全局变量,存在资源竞争问题,当运算的次越多, 效果越明显,可以使用互斥锁来解决
t2 = threading.Thread(target=fun2, args=(1000000,))
t1.start()
t2.start()
if __name__ == "__main__":
man()