首页 > 解决方案 > 如果父进程(通过 Redis 队列)超时,如何关闭 Pupetteer 页面?

问题描述

我使用 subprocess.Popen 生成 puppeteer 会话以生成节点。但是,当节点作业花费太长时间时,python 进程会超时(我正在使用 python RQ 并且它已内置超时)。

但是,当这种情况发生时.. python 工作进程正常死亡,但我可以看到 puppetter 页面仍在运行。python 工作人员以某种方式与节点“断开连接”(未发送终止信号?)

我想杀死 nodejs / puppeteer 页面(通过超时或键盘中断)。这就是我所拥有的,但是当命令行 python 进程是 Ctrl-C'd 或 RQ 超时时,puppeteer 页面仍然可见:

with Popen(command, shell=True, stdout=PIPE, stderr=PIPE) as process:
    try:
        print(process.pid)
        process.wait()
        stdout, stderr = process.communicate()

        print("stdout")
        print(stdout)

        print("stderr")
        print(stderr)

    except JobTimeoutException:
        pass
    except KeyboardInterrupt:
        try:
            process.terminate()
        except OSError:
            pass
        process.wait()
    finally:
        # if process.poll() is None:
        print("process killed")
        process.send_signal(signal.SIGINT)
        # stdout, stderr = process.communicate()

标签: pythonnode.jspython-3.xredispuppeteer

解决方案


推荐阅读