如何利用并发加速代码?实现数据生成与文件写入并发执行
实现数据生成与文件写入的并发执行
最直接的方式是用生产者消费者模型,通过线程+队列拆分任务:让数据生成作为生产者,文件写入作为消费者,二者通过队列传递数据,各自在独立线程中运行,这样写入当前数据时,下一组数据可以同时生成。
代码实现示例
import threading import queue def producer(q): # 生产者:持续生成数据并放入队列 while True: data = generate_data() q.put(data) def consumer(q): # 消费者:从队列取数据并写入文件 while True: data = q.get() write_to_file(data) q.task_done() # 标记任务完成,可选,用于队列的join()操作 if __name__ == "__main__": # 队列大小设为1,避免生成过多未写入的数据占用内存 data_queue = queue.Queue(maxsize=1) # 启动消费者线程,设为守护线程,随主线程退出 consumer_thread = threading.Thread(target=consumer, args=(data_queue,), daemon=True) consumer_thread.start() # 启动生产者逻辑(主线程或单独线程都可以) producer(data_queue)
关键细节说明
- 队列的
maxsize可根据内存情况调整:如果生成速度远快于写入,调大一点能缓冲更多数据,但别太大导致内存溢出;设为1就是严格的“生成一个、写入一个”并发模式。 - 守护线程
daemon=True:保证主线程退出时,消费者线程自动终止,无需手动处理。 - 若需要优雅停止,可给生产者和消费者加停止信号,比如用
threading.Event():stop_event = threading.Event() def producer(q, stop_event): while not stop_event.is_set(): data = generate_data() q.put(data) def consumer(q, stop_event): while not stop_event.is_set() or not q.empty(): try: data = q.get(timeout=1) write_to_file(data) q.task_done() except queue.Empty: continue
内容的提问来源于stack exchange,提问作者dronepilot
相关产品推荐
相关产品推荐

