Python多种方式实现多线程通信

2023-02-27 00:00:00 多线程 多种 通信

在Python中,可以使用多种方式实现多线程通信,包括以下几种:

1、共享变量
可以在多个线程中使用共享变量来实现通信。Python提供了threading.Lock类来实现线程同步,以避免多个线程同时访问共享变量。使用acquire()方法获得锁,使用release()方法释放锁。

import threading

shared_var = 0
lock = threading.Lock()

def thread_function():
    global shared_var
    for i in range(100000):
        lock.acquire()
        shared_var += 1
        lock.release()

t1 = threading.Thread(target=thread_function)
t2 = threading.Thread(target=thread_function)

t1.start()
t2.start()

t1.join()
t2.join()

print(shared_var)

2、队列
Python的queue模块提供了线程安全的队列,可以用于多个线程之间的通信。可以使用put()方法向队列中添加数据,使用get()方法从队列中获取数据。如果队列为空,则get()方法会阻塞线程。

import queue
import threading

q = queue.Queue()

def producer():
    for i in range(10):
        q.put(i)
        print(f"Produced: {i}")

def consumer():
    while True:
        item = q.get()
        print(f"Consumed: {item}")
        q.task_done()

t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer)

t1.start()
t2.start()

t1.join()
t2.join()

3、事件
可以使用threading.Event类实现多个线程之间的事件通信。可以使用wait()方法等待事件的发生,使用set()方法设置事件为发生状态,使用clear()方法设置事件为未发生状态。

import threading

event = threading.Event()

def worker():
    print("Waiting for event")
    event.wait()
    print("Event occurred")

t1 = threading.Thread(target=worker)
t2 = threading.Thread(target=worker)

t1.start()
t2.start()

# 等待一段时间后,设置事件发生
event.set()

t1.join()
t2.join()

这些是Python中实现多线程通信的常见方式,具体选择哪种方式取决于具体的应用场景。

相关文章