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

Python多进程运行时如何检测指定变量值是否符合预期

问题根因

Python 多进程模式下各个进程拥有独立的内存空间,子进程启动时会复制父进程的所有数据到自己的独立内存中,后续子进程对变量的修改仅作用于自身内存副本,不会同步到父进程。global关键字仅支持同一进程内跨函数作用域的全局变量引用,完全不具备跨进程同步的能力,因此你在主进程中永远无法拿到子进程更新后的checker值。

修复方案

使用multiprocessing内置的共享内存类型Value存储计数值,即可实现跨进程的读写同步,修改后的完整代码如下:

from logging import WARN
from multiprocessing import Process, Value
import time
import multiprocessing

# 初始化共享int类型变量,初始值为0
checker = Value('i', 0)

def warn():
  #DO STUFF 
  pass


def changing():
  while True:
    #STUFFS
    time.sleep(1)
    # 通过.value属性读写共享变量的值,加锁避免并发读写异常
    with checker.get_lock():
        checker.value += 1
    print('Value:', checker.value)


def proc_start():
  p_to_start = Process(target=changing)
  p_to_start.start()
  return p_to_start


def proc_stop(p_to_stop):
  p_to_stop.terminate()


if __name__ == '__main__':
  p = proc_start()
  while True:
   time.sleep(20)
   if checker.value > 10:
     with checker.get_lock():
         checker.value = 0
   else:   
    warn()
    print('-----------------------RESTARTING-----------------------------------')
    proc_stop(p)
    p = proc_start()

注:如果你的业务场景不存在多个进程同时写checker的情况,也可以省略get_lock()相关的锁逻辑,直接读写.value属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:03