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

Python多线程编程实例:使用函数实现线程与锁

发布时间:2023-06-26 09:53:48

Python是一门高级编程语言,支持多线程编程。多线程是指同时运行多个线程,每个线程都独立执行,但是线程之间可能会发生互斥、同步等问题,需要使用一些技术手段进行解决。在Python中,可以使用Thread类和Lock类实现多线程编程。

本文将通过一个实例,演示如何使用函数实现线程与锁。我们将创建一个生产者与消费者模型,模拟生产和消费商品的过程。其中,生产者和消费者将在不同的线程中运行,使用锁控制商品的数量和状态。

实现思路:

1. 定义一个全局变量num,表示商品数量,初始值为0。

2. 定义一个Lock对象,用于控制num变量的访问。

3. 定义一个生产者函数produce()和一个消费者函数consume(),分别用于生产和消费商品,函数中使用锁控制num变量的修改。

4. 创建两个Thread对象,分别表示生产者和消费者,将函数作为参数传递给Thread对象。

5. 启动Thread对象,让生产者和消费者开始运行。

6. 等待生产者和消费者线程结束。

代码实现:

import threading
import time

# 定义变量和锁
num = 0
lock = threading.Lock()

# 生产者函数
def produce():
    global num
    while True:
        lock.acquire()    # 获取锁
        if num < 10:
            num += 1
            print("Produced 1, num =", num)
        else:
            print("Stock full!")
        lock.release()    # 释放锁
        time.sleep(1)

# 消费者函数
def consume():
    global num
    while True:
        lock.acquire()    # 获取锁
        if num > 0:
            num -= 1
            print("Consumed 1, num =", num)
        else:
            print("Stock empty!")
        lock.release()    # 释放锁
        time.sleep(1)

# 创建生产者和消费者线程
t1 = threading.Thread(target=produce)
t2 = threading.Thread(target=consume)

# 启动线程
t1.start()
t2.start()

# 等待线程结束
t1.join()
t2.join()

代码说明:

- 在全局变量部分,定义了num变量和lock锁对象。

- 在生产者函数中,使用while True语句实现循环。通过获取锁和释放锁来控制num变量的访问。如果商品数量小于10,生产者就可以生产出一件商品,并将num加1;否则,生产者将无法生产商品。

- 在消费者函数中,也使用while True语句实现循环。通过获取锁和释放锁来控制num变量的访问。如果商品数量大于0,消费者就可以消费一件商品,并将num减1;否则,消费者将无法消费商品。

- 在创建生产者和消费者线程时,使用Thread对象的target参数分别指定生产者函数和消费者函数。

- 在启动线程后,使用join()方法等待线程结束。

注意:本例中使用的是线程锁,不是进程锁。如果需要使用进程锁,请使用multiprocessing.Lock()函数。