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

Python多进程新手求助:如何并行运行读写函数并实现数据传递?

用Python Multiprocessing实现读写并行操作

作为multiprocessing新手,想要让数据收集和写入同时进行,核心要解决的是进程间通信的问题——因为每个进程有独立的内存空间,没法直接共享变量,所以我们需要用multiprocessing.Queue来安全地在两个进程间传递数据。

修改后的完整代码

import multiprocessing
import random  # 用来生成随机值,模拟实际读取操作

def read_data(queue):
    values = []
    for num in range(5):
        # 模拟读取随机值,替换成你实际的读取逻辑(比如文件/网络读取)
        value = random.randint(1, 100)
        print(f'Reading {value}')
        values.append(value)
        queue.put(value)
    # 放入结束标记,告诉写入进程数据已全部收集完成
    queue.put(None)
    return values

def write_data(queue):
    arranged_values = []
    while True:
        value = queue.get()
        # 收到结束标记就停止接收数据
        if value is None:
            break
        arranged_values.append(value)
    
    # 按升序排序并写入(这里用打印模拟写入操作)
    arranged_values.sort()
    for val in arranged_values:
        print(f'Writing {val}')

if __name__ == '__main__':
    # 创建进程安全的队列,用于传递数据
    data_queue = multiprocessing.Queue()
    
    # 创建两个进程,分别绑定读、写函数
    read_process = multiprocessing.Process(target=read_data, args=(data_queue,))
    write_process = multiprocessing.Process(target=write_data, args=(data_queue,))
    
    # 启动进程,此时两个函数会并行执行
    read_process.start()
    write_process.start()
    
    # 等待两个进程全部执行完毕
    read_process.join()
    write_process.join()

关键逻辑解释

  • 进程间通信:Queue:multiprocessing.Queue是专门为进程设计的安全通信工具,能保证数据在进程间传递时不会出现冲突或丢失。
  • 读进程的工作:每次读取到数据后,就把数据放入队列,最后放入None作为“结束信号”,让写进程知道没有更多数据了。
  • 写进程的工作:不断从队列中取出数据,直到收到None信号,然后对收集到的数据排序,再执行写入操作。
  • 并行执行:启动两个进程后,读函数和写函数会同时运行——如果你的读取操作是耗时的(比如从磁盘或网络读取),这种方式能有效节省总耗时,不用等全部数据读完再开始写入。

可能的输出示例(顺序可能因进程调度略有不同)

Reading 42
Reading 17
Reading 89
Reading 33
Reading 65
Writing 17
Writing 33
Writing 42
Writing 65
Writing 89

内容的提问来源于stack exchange,提问作者Shawn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:20:53