如何用multiprocessing实现循环?后台自增数值等待输入的代码求助
问题分析与修复方案
代码里的两个核心问题
- 进程创建方式错误:创建
mp.Process时,target参数应该传入函数本身(比如target=ask),而不是调用函数(target=ask())。你现在的写法会直接在主进程中执行ask()和add(),导致程序卡在input输入环节,根本没启动子进程。 - 多进程全局变量不共享:Python多进程中,每个子进程会复制主进程的内存空间,所以
add函数里修改的num和ask函数里的num是完全独立的两个变量,就算进程创建正确,ask也无法获取到递增后的数值。
修复后的代码
使用mp.Value创建共享内存变量来实现多进程间的数值共享,同时修正进程创建的写法:
import multiprocessing as mp import time def add(num): while True: # 加锁避免多进程操作冲突 with num.get_lock(): num.value += 1 time.sleep(0.01) # 加个小延迟,避免占用过多CPU def ask(num): x = input("Input: ") print(f"你输入的内容: {x}") with num.get_lock(): print(f"当前递增数值: {num.value}") if __name__ == "__main__": # 创建共享整数变量,初始值0 num = mp.Value('i', 0) # 进程target传函数名,args传参数 p1 = mp.Process(target=add, args=(num,)) p2 = mp.Process(target=ask, args=(num,)) p1.start() p2.start() p2.join() # 先等待输入进程结束 p1.terminate() # 终止递增进程,避免死循环一直跑
关键修改说明
- 用
mp.Value('i', 0)创建共享的整数变量,'i'表示类型为整数。 - 操作共享变量时加
get_lock(),避免多进程同时修改导致数据错误。 - 进程创建时
target传函数对象,args传入需要传递给函数的参数(注意是元组形式)。 - 输入进程结束后,手动终止递增进程,因为
add是死循环,不然程序会一直运行。
内容的提问来源于stack exchange,提问作者Estronoid
相关产品推荐
相关产品推荐

