python多线程的几种方法

Python进阶(二十六)-多线程实现同步的四种方式 临界资源即那些一次只能被一个线程访问的资源,典型例子就是打印机,它一次只能被一个程序用来执行打印功能,因为不能多个线程同时操作,而访问这部分资源的代码通常称之为临界区。锁机制 threading的Lock类,用该类的acquire函数进行加锁,用realease函数进行解锁...
python多线程的几种方法
Python进阶(二十六)-多线程实现同步的四种方式
临界资源即那些一次只能被一个线程访问的资源,典型例子就是打印机,它一次只能被一个程序用来执行打印功能,因为不能多个线程同时操作,而访问这部分资源的代码通常称之为临界区。
锁机制
threading的Lock类,用该类的acquire函数进行加锁,用realease函数进行解锁
import threadingimport timeclass Num:
def __init__(self):
self.num = 0
self.lock = threading.Lock() def add(self):
self.lock.acquire()#加锁,锁住相应的资源
self.num += 1
num = self.num
self.lock.release()#解锁,离开该资源
return num

n = Num()class jdThread(threading.Thread):
def __init__(self,item):
threading.Thread.__init__(self)
self.item = item def run(self):
time.sleep(2)
value = n.add()#将num加1,并输出原来的数据和+1之后的数据
print(self.item,value)for item in range(5):
t = jdThread(item)
t.start()
t.join()#使线程一个一个执行12345678910111213141516171819202122232425262728

当一个线程调用锁的acquire()方法获得锁时,锁就进入“locked”状态。每次只有一个线程可以获得锁。如果此时另一个线程试图获得这个锁,该线程就会变为“blocked”状态,称为“同步阻塞”(参见多线程的基本概念)。
直到拥有锁的线程调用锁的release()方法释放锁之后,锁进入“unlocked”状态。线程调度程序从处于同步阻塞状态的线程中选择一个来获得锁,并使得该线程进入运行(running)状态。
信号量
信号量也提供acquire方法和release方法,每当调用acquire方法的时候,如果内部计数器大于0,则将其减1,如果内部计数器等于0,则会阻塞该线程,知道有线程调用了release方法将内部计数器更新到大于1位置。
import threadingimport timeclass Num:
def __init__(self):
self.num = 0
self.sem = threading.Semaphore(value = 3) #允许最多三个线程同时访问资源

def add(self):
self.sem.acquire()#内部计数器减1
self.num += 1
num = self.num
self.sem.release()#内部计数器加1
return num

n = Num()class jdThread(threading.Thread):
def __init__(self,item):
threading.Thread.__init__(self)
self.item = item def run(self):
time.sleep(2)
value = n.add()
print(self.item,value)for item in range(100):2018-05-29
正常执行 但是线程运行状态不受函数的控制2018-05-29
mengvlog 阅读 34 次 更新于 2025-09-10 08:37:45 我来答关注问题0
  •  翡希信息咨询 Python 多线程编程实战:threading 模块的最佳实践和常见问题

    解决方案:使用线程池(如 concurrent.futures.ThreadPoolExecutor)来管理线程的生命周期,减少线程的创建和销毁开销。线程之间的通信 在多线程编程中,线程之间的通信是一个重要问题。如果通信不当,可能会导致数据不一致或程序崩溃。解决方案:使用队列(如 queue.Queue)或其他线程安全的数据结构来实现线程...

  •  翡希信息咨询 threading简介(创建多线程的两种方法)★

    threading是Python内置的一个用于创建多线程的库,创建多线程的两种方法分别是:先定义函数再用Thread方法创建线程:首先定义一个目标函数,该函数包含线程需要执行的代码。使用threading.Thread类创建一个线程对象,通过target参数指定目标函数,args参数传递目标函数的参数,name参数可以指定线程的名称。调用线程对...

  • t.join()#使线程一个一个执行12345678910111213141516171819202122232425262728 当一个线程调用锁的acquire()方法获得锁时,锁就进入“locked”状态。每次只有一个线程可以获得锁。如果此时另一个线程试图获得这个锁,该线程就会变为“blocked”状态,称为“同步阻塞”(参见多线程的基本概念)。直到拥有锁的线程...

  •  深空见闻 python多线程退出程序的步骤和流程详解

    1. 导入所需模块 threading模块:用于创建和管理线程。time模块(可选):用于模拟时间延迟或等待。2. 创建线程类并定义运行逻辑 创建一个继承自threading.Thread的线程类,并重写run方法,定义线程的具体执行内容。3. 实现安全的线程退出机制 使用标志变量(如布尔值或threading.Event对象)来控制线程的退出...

  •  赛玖久生活日记 python 多线程和多进程、协程入门讲解

    协程:是线程的一种特殊形式,通过协同调度实现高效的并发编程,适用于高并发IO密集型任务。在实际编程中,应根据任务类型和性能需求选择合适的并发编程方式。对于Python来说,由于其全局解释器锁(GIL)的存在,多线程在CPU密集型任务上的性能可能不如多进程,但在IO密集型任务上,多线程和协程都能提供较好...

檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部