Python多线程控制线程数量

2023-03-06 00:00:00 线程 多线程 数量

在 Python 中,可以通过 threading 模块实现多线程编程。如果需要控制线程的数量,可以使用 threading.Semaphore() 类来实现信号量控制。

下面是一个简单的示例,演示如何使用信号量来控制线程的数量:

import threading

# 信号量,控制最大线程数
semaphore = threading.Semaphore(3)


def worker(num):
    # 获取信号量
    semaphore.acquire()

    # 执行任务
    print(f"Worker {num} is working...")

    # 释放信号量
    semaphore.release()


# 创建多个线程
threads = []
for i in range(10):
    t = threading.Thread(target=worker, args=(i,))
    threads.append(t)

# 启动所有线程
for t in threads:
    t.start()

# 等待所有线程完成
for t in threads:
    t.join()

在上述代码中,我们创建了一个信号量对象 semaphore,并将其初始化为 3。然后,我们定义了一个 worker() 函数,用于表示线程执行的任务。在该函数中,我们首先使用 semaphore.acquire() 方法获取信号量,表示线程开始执行任务。然后,在任务完成后,我们使用 semaphore.release() 方法释放信号量,表示线程完成了任务。

接下来,我们创建了 10 个线程,并将它们添加到 threads 列表中。然后,我们启动了所有的线程,并使用 join() 方法等待所有线程完成。

需要注意的是,当信号量的值为 1 时,相当于实现了线程的互斥执行。当信号量的值大于 1 时,相当于实现了线程的并发执行。但是,当信号量的值太大时,会影响程序的执行效率,因此需要根据实际情况选择合适的信号量值。

相关文章