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

