使用Multiprocessing开发点击器脚本时如何在检测到广告时暂停主进程
实现方案
核心采用multiprocessing.Event做进程间状态同步,控制主逻辑进程的运行/暂停状态,修改后的可运行代码如下:
from pyautogui import * import pyautogui import time import keyboard import random import win32api, win32con from multiprocessing import Process, Event import sys def ad(is_ad_showing: Event): adloop = True while adloop: # 降低检测频率避免占用过高CPU time.sleep(0.5) cross = pyautogui.locateOnScreen('image.png', confidence = 0.95) if cross != None: print("Popup!") # 标记广告已弹出,通知主逻辑暂停 is_ad_showing.clear() # 点击关闭广告,可根据实际情况调整点击位置、延迟逻辑 pyautogui.click(cross.left + cross.width//2, cross.top + cross.height//2) # 等待广告完全关闭 while pyautogui.locateOnScreen('image.png', confidence = 0.95) != None: time.sleep(0.2) # 广告关闭,重置标记,主逻辑恢复运行 is_ad_showing.set() else: print("Checking for popups...") def count(is_ad_showing: Event): amount = 0 count = True while count: # 检测到广告弹出就进入等待,直到广告关闭 is_ad_showing.wait() amount += 1 print(amount) time.sleep(1) if __name__=='__main__': # 初始化共享状态事件,默认是未触发状态 is_ad_showing = Event() # 初始无广告,设置为触发状态,主逻辑正常运行 is_ad_showing.set() p1 = Process(target = ad, args=(is_ad_showing,)) p1.start() p2 = Process(target = count, args=(is_ad_showing,)) p2.start()
逻辑说明
is_ad_showing为两个进程共享的状态标记,默认处于触发状态,代表无广告,主逻辑正常运行- 广告检测进程识别到广告后,先将标记设为未触发状态,主逻辑执行到
is_ad_showing.wait()时会自动阻塞暂停 - 广告关闭完成后,重置标记为触发状态,主逻辑自动从阻塞位置恢复继续运行
- 可根据实际游戏情况调整检测间隔、广告关闭后的等待时间,避免误判。
内容的提问来源于stack exchange,提问作者Bramsko
相关产品推荐
相关产品推荐

