python多线程操作共享资源,lock锁的应用

作者: admin 分类: Python 发布时间: 2023-02-02 23:22 浏览 38 次
from time import sleep
from threading import Thread, Lock  # 引入threading库中锁函数

# 每个下载完成后去更新一个计数
count = 0  # 记录一共下载了多少个视频
thread_tasks = 1000000  # 每个线程的任务数
thread_num = 100  # 线程数

lock = Lock()  # 多线程方法的时候使用的锁,操作过程:锁定 - 释放


def download():
    global count  # 使用全局变量,在这里声明一下
    for i in range(thread_tasks):
        lock.acquire()  # 让当前线程先锁定共享的资源,等待操作完成,再释放
        count += 1  # 这里是所有进行共享操作的资源——计数器
        lock.release()  # 将锁释放,其他进程再进行操作


threads = []  # 创建一个所有子线程列表

# 遍历预设线程总数thread_num,开启所有子线程
for task in range(thread_num):
    t = Thread(target=download)
    t.start()
    threads.append(t)  # 将所有子线程加入子线程列表

# 遍历子线程列表join(),让其拥堵主线程,等待所有子线程执行完毕,再继续执行主线程下面代码
for t in threads:
    t.join()    # 让主线程等待所有子线程执行完毕后,再继续执行主线程下面代码

print(f"应该下载数为:{thread_num * thread_tasks}")  # 打印应该执行的总数——计数器count
print(f'实际下载数为:{count}')  # 打印实际执行的总数——所有线程修改结束后的count值

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续整理创作!

发表评论

邮箱地址不会被公开。 必填项已用*标注