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

Python multiprocessing结合Value、Lock实现指定输出问题求解

多进程计数轮询打印实现

核心要求

  • 基于multiprocessing模块实现双函数结构
  • 第一个函数负责接收用户输入的起止数值、姓名列表
  • 第二个函数固定命名为set,必须包含name、item、iter_stop、lock四个必填参数,负责打印逻辑
  • 必须使用Process、Lock、Value三个核心组件
  • 输入示例:
    • 起止数值:0 4
    • 姓名列表:Alex Jenn Jack
  • 期望输出:
Alex 0
Jenn 1
Jack 2
Alex 3
Jenn 4

原有代码问题

  • 共享计数Value的初始值没有和用户输入的起始值绑定,存在逻辑断层
  • set函数没有做循环判断、终止条件校验,无法实现从起始值到终止值的连续计数
  • 进程创建、参数传递逻辑错误,没有正确给set函数传入要求的四个参数
  • 原计数逻辑是先自增再打印,和要求的从起始值开始输出的规则不符
  • 没有实现姓名列表轮询匹配计数的逻辑,无法对齐期望输出格式

修正后可运行代码

from multiprocessing import Process, Lock, Value
import time

def set(name, item, iter_stop, lock):
    """
    按计数轮询打印姓名和对应数值
    :param name: 当前进程绑定的姓名
    :param item: 共享内存计数Value对象
    :param iter_stop: 计数终止值
    :param lock: 进程互斥锁
    """
    while True:
        with lock:
            current_num = item.value
            # 计数超过终止值直接退出进程
            if current_num > iter_stop:
                return
            # 打印当前姓名和计数值
            print(f"{name} {current_num}")
            # 计数值自增
            item.value = current_num + 1
        # 短暂休眠避免单个进程长期占用锁,保证轮询顺序
        time.sleep(0.001)

def task_init():
    # 接收用户输入
    start, iter_stop = map(int, input().split())
    players = input().split()
    # 初始化共享计数器,初始值为输入的起始值
    count_item = Value('I', start)
    # 初始化互斥锁
    process_lock = Lock()
    process_pool = []
    # 为每个姓名创建独立进程
    for player in players:
        p = Process(target=set, args=(player, count_item, iter_stop, process_lock))
        process_pool.append(p)
        p.start()
    # 等待所有进程执行结束
    for p in process_pool:
        p.join()

if __name__ == '__main__':
    task_init()

逻辑说明

  • 用Value做跨进程共享的计数器,所有进程共同操作同一个计数变量,保证计数连续不重复
  • 用Lock做互斥控制,同一时间只有一个进程能执行打印、计数自增操作,避免输出混乱、计数重复
  • 每个进程绑定一个姓名,抢到锁就打印当前绑定的姓名和计数值,之后计数器自增,释放锁后短暂休眠让出CPU,保证姓名按列表顺序轮询
  • 当计数器值超过输入的终止值时,所有抢到锁的进程会直接退出,程序结束

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.22 16:15:01