[Python 教程] Python 多线程编程指南
Python 多线程编程指南
Python 的 threading 模块提供多线程支持。本文介绍多线程编程的基础和实用技巧。
一、创建线程
import threading
import time
def worker(name, delay):
for i in range(3):
time.sleep(delay)
print(f'{name} 执行第 {i+1} 次')
# 创建线程
t1 = threading.Thread(target=worker, args=('线程 1', 1))
t2 = threading.Thread(target=worker, args=('线程 2', 1.5))
# 启动线程
t1.start()
t2.start()
# 等待线程完成
t1.join()
t2.join()
print('所有线程完成')
二、线程池
from concurrent.futures import ThreadPoolExecutor
def task(n):
time.sleep(1)
return f'任务 {n} 完成'
with ThreadPoolExecutor(max_workers=3) as executor:
results = list(executor.map(task, range(5)))
print(results)
三、线程锁
lock = threading.Lock()
counter = 0
def increment():
global counter
for _ in range(1000):
lock.acquire()
try:
counter += 1
finally:
lock.release()
threads = []
for _ in range(5):
t = threading.Thread(target=increment)
threads.append(t)
t.start()
for t in threads:
t.join()
print(f'最终计数:{counter}')
四、守护线程
def daemon_worker():
while True:
time.sleep(1)
print('守护线程运行中...')
d = threading.Thread(target=daemon_worker)
d.setDaemon(True) # 设置为守护线程
d.start()
五、线程通信
from queue import Queue
queue = Queue()
def producer():
for i in range(5):
queue.put(i)
print(f'生产:{i}')
def consumer():
while True:
item = queue.get()
if item is None:
break
print(f'消费:{item}')
queue.task_done()
p = threading.Thread(target=producer)
c = threading.Thread(target=consumer)
p.start()
c.start()
p.join()
queue.put(None)
c.join()
