欢迎访问宙启技术站
智能推送

Python多线程编程常用函数及实例

发布时间:2023-06-13 06:31:37

Python是一种高级编程语言,它提供了丰富的库和内置函数来支持多线程编程。多线程编程是一种将程序分割成多个并发执行的部分的编程方式,它是实现并发性和并行性的一种常用方法。本文将介绍Python多线程编程中常用的函数及实例。

一、Python多线程编程常用函数

1. Thread类

在Python多线程编程中,使用Thread类来创建新的线程。Thread类有以下几个常用方法:

- run():定义线程运行的方法,必须重载该方法;

- start():开始执行线程;

- join([time]):线程等待众多线程完成执行;

- is_alive():判断线程是否还在执行;

- setDaemon(bool):设置线程是否为守护线程;

- getName():获取线程名称。

2. Lock类

在多线程编程中,经常需要对共享资源进行加锁访问。Python提供了Lock类来实现基本的锁机制。Lock类有以下几个常用方法:

- acquire([blocking]):获取锁对象(锁定);

- release():释放锁对象;

- locked():判断锁是否被锁定。

3. RLock类

RLock是一种可重入锁,可以同步对同一个资源的访问,并且可以多次锁定。当一个线程多次地锁定同一个资源时,必须解锁同样次数才能解锁该资源。RLock类有以下几个常用方法:

- acquire([blocking]):获取锁对象(锁定);

- release():释放锁对象;

- locked():判断锁是否被锁定。

4. Condition类

Python多线程编程中,Condition类可以实现线程之间的协调和互斥。Condition类有以下几个常用方法:

- acquire([blocking]):获取锁对象(锁定);

- release():释放锁对象;

- wait([timeout]):在等待队列中等待;

- notify([n]):通知等待队列中的 个线程;

- notifyAll():通知等待队列中的所有线程。

5. Semaphore类

Semaphore类是一种计数信号量,用于控制对共享资源的访问。计数信号量记录资源数量,并且当某个线程请求访问该共享资源时,只有在资源数量大于零时才允许访问。Semaphore类有以下几个常用方法:

- acquire([blocking]):获取信号量;

- release():释放信号量;

- locked():判断信号量是否被锁定。

6. Event类

Event类用于线程之间的事件通信。Event类有以下几个常用方法:

- set():设置事件发生;

- clear():清除事件状态;

- wait([timeout]):等待事件发生。

二、Python多线程编程实例

以下是Python多线程编程常用函数的应用实例。

1. 使用Lock类锁定线程

#coding=utf-8

import threading

import time

class MyThread(threading.Thread):

    def __init__(self, varLock):

        threading.Thread.__init__(self)

        self.varLock = varLock

    def run(self):

        self.varLock.acquire()

        print("%s:正在运行,锁定" % self.name)

        time.sleep(5)

        self.varLock.release()

if __name__ == "__main__":

    varLock = threading.Lock()

    for i in range(5):

        t = MyThread(varLock)

        t.start()

2. 使用Semaphore类控制线程数量

#coding=utf-8

import threading

import time

class MyThread(threading.Thread):

    def __init__(self, semaphore):

        threading.Thread.__init__(self)

        self.semaphore = semaphore

    def run(self):

        self.semaphore.acquire()

        print("%s:正在运行,信号量为:%s" % (self.name, self.semaphore._Semaphore__value))

        time.sleep(5)

        self.semaphore.release()

if __name__ == "__main__":

    semaphore = threading.Semaphore(3)

    for i in range(5):

        t = MyThread(semaphore)

        t.start()

3. 使用Condition类实现线程之间的协作

#coding=utf-8

import threading

import time

class Producer(threading.Thread):

    def __init__(self, condition):

        threading.Thread.__init__(self)

        self.condition = condition

    def run(self):

        while True:

            if self.condition.acquire():

                print("生产者" + self.name + ":生产成功,唤醒消费者")

                self.condition.notify()

                self.condition.release()

                time.sleep(5)

class Consumer(threading.Thread):

    def __init__(self, condition):

        threading.Thread.__init__(self)

        self.condition = condition

    def run(self):

        while True:

            if self.condition.acquire():

                print("消费者" + self.name + ":消费成功,唤醒生产者")

                self.condition.wait()

                self.condition.release()

                time.sleep(5)

if __name__ == "__main__":

    condition = threading.Condition()

    for i in range(2):

        producer = Producer(condition)

        producer.start()

    for i in range(2):

        consumer = Consumer(condition)

        consumer.start()

以上就是Python多线程编程常用的函数及实例。多线程编程中需要注意的是,需要对共享资源加锁控制,并且需要进行线程之间的协调和互斥,才能实现良好的并发效果。