1、互斥锁的概念互斥锁: 对共享数据进行锁定,保证同一时刻只能有一个线程去操作。 【对共享数据进行锁定可以理解为全局变量】注意:互斥锁是多个线程一起去抢,抢到锁的线程先执行,没有抢到锁的线程需要等待,等互斥锁使用完释放后,其它等待的线程再去抢这个锁。 2、互斥锁的使用threading模块中定义了Lock变量,这个变量本质上是一个函数,通过调用这个函数可以获取一把互斥锁。互斥锁使用步骤
1、案例需求: 根据配置信息使用闭包实现不同人的对话信息,例如对话:张三: 到北京了吗? 李四: 已经到了,放心吧。2、实现步骤说明定义外部函数接收不同的配置信息参数,参数是人名定义内部函数接收对话信息参数在内部函数里面把配置信息和对话信息进行拼接输出3、功能代码的实现 # 外部函数 def config_name(name): # 内部函数 def say_info(info):
数据模型与存储结构Doris 数据库:采用列式存储,将同一列的数据存储在一起,这种存储方式在处理大规模数据分析和查询时,能有效减少 I/O开销,提高查询性能,尤其是对于只需要读取部分列的查询操作。MySQL:通常采用行式存储,将一行数据的所有列连续存储,这种方式适合 OLTP场景下对单行数据的快速读写操作,能快速定位和获取整行数据。查询性能与应用场景Doris 数据库:专为大数据分析和查询而设计,
1. 线程的概念 线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要cpu进行调度 ,也就是说线程是cpu调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程。2. 线程的作用 多线程可以完成多任务多线程效果图:
1、修改闭包内使用的外部变量1.1 修改闭包内使用的外部变量的错误示例:# 定义一个外部函数 def func_out(num1): # 定义一个内部函数 def func_inner(num2): # 这里本意想要修改外部num1的值,实际上是在内部函数定义了一个局部变量num1 num1 = 10 # 内部函数使用了外部函数的变量
1、装饰器的使用场景函数执行时间的统计输出日志信息2、装饰器实现已有函数执行时间的统计import time # 装饰器函数 def get_time(func): def inner(): begin = time.time() func() end = time.time() print("函数执行花费%f" % (e
1、property属性的介绍property属性就是负责把一个方法当做属性进行使用,这样做可以简化代码使用。定义property属性有两种方式装饰器方式类属性方式2、装饰器方式class Person(object): def __init__(self): self.__age = 0 # 私有属性 # 装饰器方式的property, 把age方法当做
1. 死锁的概念死锁: 一直等待对方释放锁的情景就是死锁死锁的结果会造成应用程序的停止响应,不能再处理其它任务了。2. 死锁示例需求:根据下标在列表中取值, 保证同一时刻只能有一个线程去取值import threading import time # 创建互斥锁 lock = threading.Lock() # 根据下标去取值, 保证同一时刻只能有一个线程去取值 def g
1、类装饰器的介绍装饰器还有一种特殊的用法就是类装饰器,就是通过定义一个类来装饰函数。类装饰器示例代码:class Check(object): def __init__(self, fn): # 初始化操作在此完成 self.__fn = fn # 实现__call__方法,表示对象是一个可调用对象,可以像调用函数一样进行调用。 def
1、Lock和RLock概念Lock:Lock被称为原始锁,原始锁是一个在锁定时不属于特定线程的同步基元组件,它是能用的最低级的同步基元组件。原始锁处于 "锁定" 或者 "非锁定" 两种状态之一。它被创建时为非锁定状态。它有两个基本方法, acquire() 和 release() 。当状态为非锁定时, acquire() 将状态改为锁定并立即返回。当状态是锁定时, acquire() 将阻塞至其
python在同一个线程中多次执行同一方法时,假设该方法执行耗时较长且每次执行过程及结果互不影响,如果只在主进程中执行,效率会很低,因此使用multiprocessing.Pool(processes=n)及其apply_async()方法提高程序执行的并行度从而提高程序的执行效率,其中processes=n为程序并行执行的进程数。1、applyapply()方法是阻塞的,也就是说等待
python中使用到的队列模块大致有三个:1、from queue import Queue 此模块适用于线程间通信,但不能用于进程间通信。示例代码1: 【注意:此时代码存在错误!!!】import time import threading from queue import Q
在python代码中,如果需要程序暂停一段时间,通常情况下使用的是time.sleep()方法。示例代码:import time print('...部分代码...') time.sleep(3) print('...剩下的代码...')运行结果:在多线程中,还有另外一种方法,threading模块中的Event。示例代码:import threading event = threadin
1、单线程示例代码:import time from queue import Queue def task_func(queue): while queue.qsize() > 0: x = queue.get() print(f"num: {x}") time.sleep(0.1) def single_thead(
线程池的基类是 concurrent.futures 模块中的 Executor,Executor 提供了两个子类,即 ThreadPoolExecutor 和 ProcessPoolExecutor,其中 ThreadPoolExecutor 用于创建线程池,而 ProcessPoolExecutor 用于创建进程池。示例代码1: 【使用map方法】 from conc
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号