gpt4 book ai didi

node.js - 检查子进程是否正在运行

转载 作者:搜寻专家 更新时间:2023-10-31 23:09:43 24 4
gpt4 key购买 nike

我建立了一个门户,其中一个页面列出了 Octopus Deploy 的发布。但是,每个版本所需的一些信息保存在数据存储(共享驱动器)中的 zip 文件中。

我目前从 Octopus 的 API 获取版本,然后检查 mongo db,其中存储了我已经访问过的 zip 文件的信息,因此我们只需读取一次 zip 文件,即第一次创建它们时.

目前这一切的逻辑都有效,但是当它第一次读取 zip 文件时它完全阻塞了。所以我把它放在一个运行良好的子进程中。

目前,所有这些逻辑都会在用户每次点击发布页面时运行。如果 Octopus 部署的所有结果都在数据库中,那么它只返回这些结果。如果不是,它将返回结果,然后在子进程将其插入数据库后使用套接字 io 返回从 zip 文件读取的信息。

现在是实际问题/问题。如果用户 A 点击页面并从不在数据库中的 Octopus 获取释放,则每次用户点击该页面时它都会运行,它将启动子进程以读取 zip。如果用户 B 在用户 A 的子进程完成之前点击该页面,他们也会从不在数据库中的 Octopus 中获得一个释放,因此将尝试点击子进程来做与用户 A 相同的事情。但是因为代码读取 zip 文件被阻塞,它将等到从用户 A 读取所有 zip 文件,然后为用户 B 重复该过程。

我如何检查子进程是否已经在执行 zip 读取,如果没有执行则执行其他操作?

我试过设置一个“inuse”变量,并在尝试在子进程和调用它的模块中执行读取 zips 函数时检查它。问题在于子进程中的 zip 读取函数会阻止它,一旦它完成,就会将 in-use 变量设置为 false,因此排队的调用运行相同的事情。在模块中,每次用户加载页面时都会加载它,因此它会重置为默认值 false,因此始终会调用读取 zip 函数。

最佳答案

检查退出事件监听器。 http://nodejs.org/api/child_process.html#child_process_event_exit

然后你将一些逻辑作为某种全局对象来维护状态。就像我们在启动 child 时设置一个标志,并在 ext 事件触发时将其设置为关闭。

关于node.js - 检查子进程是否正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com