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
相关产品推荐
相关产品推荐

