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 阅读 8 次 更新于 2025-07-19 20:05:03 我来答关注问题0
  •  翡希信息咨询 threading简介(创建多线程的两种方法)★

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

  •  翡希信息咨询 一文带您了解Python中的并发:异步(Asyncio)和多线程(Multithreading)

    Python中的并发主要有异步和多线程两种方式:多线程:定义:多线程是指在一个程序中创建多个线程,每个线程可以独立执行代码,从而实现并发执行。实现方式:Python的threading模块支持创建和管理多个独立执行流。特点:多线程适用于CPU密集型任务,能够充分利用多核CPU的计算能力。应用场景:当需要同时执行多个计...

  •  翡希信息咨询 Python 多线程编程实战:threading 模块的最佳实践和常见问题

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

  •  文暄生活科普 threading简介(创建多线程的两种方法)★

    threading是Python内置的一个创建多线程的库,调用threading库中的threading.Thread方法来创建线程。创建多线程的基本语法为:threading.Thread(target=函数名, args=(函数参数1,...函数参数n), name='线程名')。二、threading的使用方法 1、创建线程的思路1:先定义函数再用Thread方法创建线程 定义函数tes...

  •  翡希信息咨询 一文带您了解Python中的并发:异步(Asyncio)和多线程(Multithreading)

    Python中的并发主要有异步编程和多线程两种方法。异步编程: 核心机制:利用协程在单线程中并发执行任务。 事件循环:通过单线程事件循环管理异步任务的执行。 适用场景:适用于IO密集型任务,能更好地利用CPU和内存,避免线程切换的开销。 示例:通过await asyncio.sleep模拟异步操作,提高程序的响应性。多...

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

Python相关话题

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