You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用并发加速代码?实现数据生成与文件写入并发执行

实现数据生成与文件写入的并发执行

最直接的方式是用生产者消费者模型,通过线程+队列拆分任务:让数据生成作为生产者,文件写入作为消费者,二者通过队列传递数据,各自在独立线程中运行,这样写入当前数据时,下一组数据可以同时生成。

代码实现示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:31:13