Python多进程写入同一文件的方法有以下几种:
使用互斥锁(Lock):多个进程共享一个互斥锁,每次只允许一个进程获得锁进行写入操作,其他进程需要等待锁释放。import multiprocessingdef write_data(lock, filename, data):with lock:with open(filename, 'a') as file:file.write(data)if __name__ == '__main__':lock = multiprocessing.Lock()processes = []for i in range(5):p = multiprocessing.Process(target=write_data, args=(lock, 'data.txt', f'Process {i}\n'))processes.append(p)p.start()for p in processes:p.join()使用进程池(Pool):创建一个进程池,将写入任务添加到进程池中并执行。import multiprocessingdef write_data(filename, data):with open(filename, 'a') as file:file.write(data)if __name__ == '__main__':with multiprocessing.Pool(processes=5) as pool:for i in range(5):pool.apply_async(write_data, ('data.txt', f'Process {i}\n'))pool.close()pool.join()使用队列(Queue):创建一个进程间通信的队列,将写入数据放入队列中,由一个进程负责从队列中取出数据并写入文件。import multiprocessingdef write_data(filename, queue):with open(filename, 'a') as file:while not queue.empty():data = queue.get()file.write(data)if __name__ == '__main__':queue = multiprocessing.Queue()for i in range(5):queue.put(f'Process {i}\n')processes = []for i in range(5):p = multiprocessing.Process(target=write_data, args=('data.txt', queue))processes.append(p)p.start()for p in processes:p.join()无论使用哪种方法,都需要注意文件写入的时候可能会出现竞争条件(如两个进程同时写入文件),因此需要使用适当的同步机制来保证数据的完整性和一致性。