栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

白月黑羽教python_python 白月黑羽?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

白月黑羽教python_python 白月黑羽?

# 进程就是运行着的程序
# windows下面打开任务管理器,里面显示了当前系统上运行着的进程
# 程序没有运行的时候,它们的程序代码文件存储在磁盘中,就是那些扩展名为.exe文件
# 系统中每个进程里面至少包含一个线程
# 线程是操作系统创建的,每个线程对应一个代码执行的数据结构,保存了代码执行过程中重要的状态信息
# 我们前面写的python程序,里面虽然没有创建线程的代码,但实际上,当python解释器程序运行起来(成为一个进程),OS就自动的创建一个线程,通常称为主线程,在这个主线程里面执行代码指令
# cpu多核,每个核都可以执行代码
# 要运行程序里的代码,操作系统就会分配一个cpu核心去执行该代码
# 如果是一个cpu核心执行这个函数,压缩一个文件要10秒钟的话,那么压缩4给文件,就要40秒
# 能够让4个cpu核心能同时去执行压缩函数,理论上就只要10秒
# 单线程,只会有一个cpu核心去执行,那么就需要40秒
# 同时让多个cpu执行任务,我们的程序必须写创建新的线程的代码

# 让多个cpu核心同时去执行任务,我们程序必须创建多个线程,让cpu执行多个线程对应的代码
# 应用程序必须通过操作系统提供的系统调用,请求操作系统分配一个新的线程
# python3将系统调用创建线程的功能封装在标准库threading中


print('主线程执行代码')
# 从threading库中导入Thread类
from threading import Thread, Lock
from time import sleep

# # 定义一个函数,作为新线程执行的入口函数
# def threadFun(arg1, arg2):
#     print('子线程开始')
#     print(f'线程函数参数是:{arg1},{arg2}')
#     sleep(5)
#     print('子线程结束3333')
#
# # 创建Thread类的实例对象,并且指定新线程的入口函数
# thread = Thread(target=threadFun, args=("参数1", "参数2"))
#
# # 执行start方法,就会创建新线程
# # 并且新线程会去执行入口函数里面的代码
# # 这时候这个进程有两个线程了
# thread.start()
#
# # 主线程的代码执行子线程对象的join方法
# # 就会等待子线程结束,才继续执行下面的代码
# thread.join()
# print('主线程结束。。。。。')

# 有的时候,一个线程需要等待其他的线程结束,如果需要根据其他线程运行结束后的结果行处理
# 可以使用Thread对象的join方法
# thread.join()
# 如果一个线程A的代码调用了对应线程B的Thread对象的join方法,线程A就会停止继续执行代码
# 等待线程B结束。线程B结束后,线程A才继续执行后续的代码
# 所以主线程在执行上面的代码时,就暂停在此处,一直要等到线程执行完毕,退出后,才会继续执行后续代码


# 做多线程开发,经常遇到这样的情况:多个线程立里面的代码需要访问同一个公共的数据对象
# 这个公共的数据对象可以是任何类型,比如一个列表、字典、或自定义的对象。
# 有的时候,程序需要防止线程的代码同时操作公共数据对象。否则,就有可能导致数据的访问互相冲突影响
# 例如:模拟一个银行系统,用户可以往自己的账号上存钱

bank = {
    'byhy': 0
}

bankLock = Lock()
# 定义一个函数,作为新线程执行的入口函数
def deposit(theadidx, amount):
    # 操作共享数据前,申请获取锁
    bankLock.acquire()

    balance = bank['byhy']
    # 执行一些任务,耗费0.1秒
    sleep(0.1)
    bank['byhy'] = balance + amount
    print(f'子线程{theadidx}结束')

    # 操作完共享数据后,申请释放锁
    bankLock.release()


theadlist = []
for idx in range(10):
    thread = Thread(target=deposit, args=(idx, 1))

    thread.start()
    # 把线程对象都存储到threadlist中
    theadlist.append(thread)

for thread in theadlist:
    thread.join()

print('主线程结束')
print(f'最后我们的账号余额为{bank["byhy"]}')   #大家都加一快钱变成10快钱
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号