Python中的线程

在Python中,线程是一种轻量级的执行单元,它能够在一个进程中同时执行多个任务。与进程不同,线程共享同一进程的内存空间,因此线程之间的通信和数据共享比进程更加方便和高效。

Python中的线程使用 threading 模块来实现,该模块提供了创建和管理线程的类和函数。以下是一些常用的线程相关的函数和类:

  • threading.Thread(target=None, args=(), kwargs={}): 用于创建一个新的线程,参数 target 指定线程执行的函数,argskwargs 分别是传递给该函数的位置参数和关键字参数。
  • threading.current_thread(): 返回当前线程对象。
  • threading.active_count(): 返回当前活跃的线程数。
  • threading.enumerate(): 返回当前所有活跃的线程列表。
  • threading.Lock(): 用于创建一个锁对象,可用于线程间的同步。

下面是一个简单的例子,演示如何使用Python中的线程来并发执行两个函数:

import threading

def print_numbers():
    for i in range(10):
        print(i)

def print_letters():
    for c in 'abcdefghij':
        print(c)

t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_letters)

t1.start()
t2.start()

t1.join()
t2.join()

在这个例子中,我们定义了两个函数 print_numbers 和 print_letters,然后使用 threading.Thread 函数创建了两个新的线程,分别执行这两个函数。最后我们调用 start 方法来启动线程,join 方法等待线程执行完毕。这样就可以实现并发执行两个函数的效果。
下面是一个使用锁来实现线程间同步的示例代码,其中多个线程共享一个计数器,通过锁确保每次只有一个线程能够对计数器进行更新,从而避免竞争条件。

import threading

class Counter:
    def __init__(self):
        self.count = 0
        self.lock = threading.Lock()

    def increment(self):
        with self.lock:
            self.count += 1

def worker(counter):
    for i in range(10000):
        counter.increment()

counter = Counter()
threads = [threading.Thread(target=worker, args=(counter,)) for i in range(10)]

for thread in threads:
    thread.start()

for thread in threads:
    thread.join()

print(counter.count)

需要注意的是,由于线程共享同一进程的内存空间,因此线程之间的数据访问需要进行同步。可以使用 threading.Lock 对象来实现线程间的互斥访问,从而避免竞争条件导致的数据错乱。

添加微信