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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:42:00