2014-01-21 105 views
3

我构建了一个门户,其中一个页面列出了来自Octopus Deploy的发布。然而,每个版本所需的一些信息将保存在数据存储区(共享驱动器)的zip文件中。检查子进程是否正在运行

我目前从Octopus的API获得发布,然后检查一个mongo数据库,其中来自zip文件的已存储信息已经被访问过,所以我们只需要在第一次创建时读取zip文件一次。

当前所有的逻辑工作,但当它第一次读取压缩文件,它是完全阻止。所以我把它放在一个运行并且工作得很好的孩子进程中。

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

现在的实际问题/问题。如果用户每次点击该页面并且从不在数据库中的章鱼获得释放,则每当用户点击该页面时其运行,它将开始子过程以读取该zip。如果用户B在用户A的子进程完成之前点击该页面,他们也将从章鱼中得到一个不在数据库中的版本,因此会尝试敲击子进程来执行与用户A相同的操作。阅读zip文件阻止它等到所有的zip文件都从用户A读取,然后重复用户B的进程。

我如何检查子进程是否已经在执行zip读取,如果它不是那么执行,如果是,那么做别的事情?

我试着设置一个'inuse'变量,并在尝试在子进程中执行读取zips函数并在调用它的模块中检查它。麻烦在子进程中,zip读取函数阻塞它,一旦完成,将inuse变量设置为false,因此排队调用运行相同的事情。在每次用户加载页面时加载它的模块,以便将其重置为默认值false,以便始终调用读取zip函数。

+0

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

+0

@KamranShahid在子进程完成时不会激发吗?在用户A启动子进程的情况下,这将如何工作。 “读取zip文件”功能正在进行中。然后用户B击中该页面,并想要查找是否正在读取“读取zip文件”功能? – ste2425

+0

维持状态的某种全局对象。就像我们在启动孩子时设置了一个标志,并在ext事件触发时将其设置为关闭 –

回答