Python3学习笔记-34(多线程)

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()



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值