在Python中编写多线程代码,有一些最佳实践:
- 避免共享资源
线程间共享资源会产生竞争条件,导致数据错乱。应该使用线程间通信的方式,如Queue。 - 使用Lock保护共享资源
如果线程必须共享资源,可以使用Lock来保护关键区域,确保任一时刻只有一个线程访问资源。
## python www.itzhimei.com 代码
import threading
lock = threading.Lock()
def increment():
global x
with lock:
x += 1
- 使用线程池,限制线程数目
线程数目过多会导致切换overhead和资源竞争。应使用线程池控制线程数。
## python www.itzhimei.com 代码
from concurrent.futures import ThreadPoolExecutor
pool = ThreadPoolExecutor(max_workers=3)
pool.submit(some_task)
- 避免死锁
若线程互相等待锁,会造成死锁。应按照一定顺序请求锁。 - 使用线程间通信
线程间可以使用Queue来安全地传递数据。
## python www.itzhimei.com 代码
from queue import Queue
q = Queue()
q.put(123)
data = q.get()
遵循这些实践可以写出健壮的多线程程序。