Python多线程库theading

Python的theading库是一个方便的多线程库。它提供了一个线程类`Thread`,一个锁类`Lock`和一个信号量类`Semaphore`等等,可以用来实现多线程编程。

线程类`Thread`:

线程类Thread提供的方法:

- `Thread(target=None, args=(), kwargs={})`:

创建一个实例并返回,参数`target`是要执行的函数名,`args`和`kwargs`是该函数所需的参数。

- `start()`:

启动线程,调用该方法后,线程便开始运行。

- `join(timeout=None)`:

等待线程执行完毕,调用该方法后,主线程会等待该子线程执行完毕后再继续执行,timeout是超时时间。

- `is_alive()`:

判断线程是否在运行。

线程类Thread的使用方法:

假设有一个函数`func`,需要在多个线程同时执行该函数。

import threading

def func(arg1, arg2):

    # 该函数的具体逻辑

    pass

t1 = threading.Thread(target=func, args=(arg1, arg2))

t2 = threading.Thread(target=func, args=(arg3, arg4))

t3 = threading.Thread(target=func, args=(arg5, arg6))

t1.start() # 启动线程

t2.start()

t3.start()

t1.join() # 主线程等待t1线程执行完毕

t2.join()

t3.join()

锁类`Lock`:

锁类Lock提供的方法:

- `acquire(blocking=True, timeout=-1)`:

获得锁,如果锁已被其他线程占用,则阻塞等待。参数`blocking`表示是否阻塞,默认为True,即阻塞等待。参数`timeout`表示阻塞等待的时间,单位为秒,如果超时则返回False。

- `release()`:

释放锁,将锁标记为可用状态。

锁类Lock的使用方法:

当多个线程同时执行时,可能会出现资源竞争的情况,此时可以使用锁来实现资源的互斥访问。

import threading

lock = threading.Lock()

def func():

    lock.acquire() # 获得锁

    # 执行一些需要互斥访问的操作

    lock.release() # 释放锁

信号量类`Semaphore`:

信号量类Semaphore提供的方法:

- `Semaphore(value=1)`:创建一个实例并返回,参数value表示信号量的初始值,即可同时允许的线程数。

- `acquire(blocking=True, timeout=None)`:获得信号量。当信号量的值不为0时,线程可以获得信号量,并将信号量的值减1。当信号量的值为0时,线程会阻塞等待,直到有其他线程释放信号量。

- `release()`:释放信号量。将信号量的值加1,释放资源。

信号量类Semaphore的使用方法:

当需要限制同时执行某段代码的线程数时,可以使用信号量类Semaphore来实现

import threading

semaphore = threading.Semaphore(2) # 同时只允许2个线程执行

def func():

    semaphore.acquire() # 获得信号量

    # 执行需要限制并发的操作

    semaphore.release() # 释放信号量

猜你喜欢

转载自blog.csdn.net/2201_75480526/article/details/129322852