Python多进程变量状态不共享:run变量修改未跨进程生效
多进程中全局变量无法同步的原因及解决办法
问题根源
你用multiprocessing创建的是独立进程,每个进程都有自己的内存空间。全局变量run会被复制一份到每个进程里,clickClaim里修改的只是当前进程的run副本,和mainScript进程里的run完全是两个独立变量,自然不会同步。global关键字只能作用于单个进程内的全局变量,跨进程完全无效。
两种可行解决方案
方案1:改用线程(threading)
线程共享同一进程的内存空间,全局变量可以直接同步,代码改动最小,适合游戏机器人这类IO密集型场景:
import threading # 保留你原有的pyautogui、keyboard等导入 run = True # 领取战利品 def clickClaim(): global run while not keyboard.is_pressed('q'): if pyautogui.locateCenterOnScreen("Images/cl.png", confidence=.8): run = False sc.sac("Images/cl.png", 0.1) pyautogui.click(960, 500) pyautogui.click(960, 500) run = True # 当run为True时执行长按操作 def mainScript(): clicked = False while not keyboard.is_pressed('q'): global run if run and not clicked: pyautogui.mouseDown(1200, 500) print("Mouse is Down") clicked = True elif not run and clicked: pyautogui.mouseUp() print("Mouse Is Up") clicked = False mainS = threading.Thread(target=mainScript) bgClaim = threading.Thread(target=clickClaim) if __name__ == '__main__': bgClaim.start() mainS.start()
方案2:用多进程共享变量(如果必须用多进程)
通过multiprocessing.Value创建跨进程共享的变量,确保两个进程操作的是同一个值:
import multiprocessing # 保留你原有的pyautogui、keyboard等导入 # 创建布尔型共享变量,初始值为True run = multiprocessing.Value('b', True) # 领取战利品 def clickClaim(run): while not keyboard.is_pressed('q'): if pyautogui.locateCenterOnScreen("Images/cl.png", confidence=.8): run.value = False sc.sac("Images/cl.png", 0.1) pyautogui.click(960, 500) pyautogui.click(960, 500) run.value = True # 当run为True时执行长按操作 def mainScript(run): clicked = False while not keyboard.is_pressed('q'): if run.value and not clicked: pyautogui.mouseDown(1200, 500) print("Mouse is Down") clicked = True elif not run.value and clicked: pyautogui.mouseUp() print("Mouse Is Up") clicked = False mainS = multiprocessing.Process(target=mainScript, args=(run,)) bgClaim = multiprocessing.Process(target=clickClaim, args=(run,)) if __name__ == '__main__': bgClaim.start() mainS.start()
总结
- 游戏机器人这类以IO操作为主的任务,用线程更简单,无需额外处理共享状态。
- 如果必须用多进程,就用
multiprocessing提供的共享变量(如Value、Array)来同步状态。
内容的提问来源于stack exchange,提问作者DrunkGuy
相关产品推荐
相关产品推荐

