处理JSON文件时,如果同时使用多线程可能会出现线程安全问题,例如多个线程同时写入同一个文件可能会导致数据混乱或者文件错误。
为了避免这种问题,可以使用线程锁(threading.Lock)来保证每个线程的操作是原子的(atomic)。具体方式如下:
- 在主程序中创建一个线程锁对象
python
lock = threading.Lock()
- 在每个线程操作文件时先获取线程锁
python
lock.acquire()
# 线程操作文件的代码
lock.release()
- 最后释放线程锁
完整代码如下:
python
import json
import threading
def write_json(filename, data):
with open(filename, 'a') as f:
f.write(json.dumps(data) + '\n')
def write_json_multithread(filename, data):
lock = threading.Lock()
def worker():
lock.acquire()
write_json(filename, data)
lock.release()
threads = []
for i in range(10):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
for t in threads:
t.join()
在上述代码中,定义了两个函数,write_json
用于向JSON文件中写入数据,write_json_multithread
则是使用多线程的方式进行文件写入操作。多线程参考线程锁来保证了线程安全。