我正在尝试使用select first_name, last_name, salary from hr.employees where salary between 2000 and 15000
minus
select first_name, last_name, salary from hr.employees where salary not between 5000 and 10000
在每次调用时以不同的参数在for循环中调用CLI工具。到目前为止,还不错,但是如果我想引入最大数量的子进程,并且仅在关闭前一个进程时继续产生新的进程,则会遇到麻烦。我想在达到有限的子进程数量时使用无限的while循环暂停for循环。但是,子进程似乎永远不会触发“关闭”事件。
以child_process.spawn
为例(抱歉,我想不出一个好而又持久的命令,它会在一段时间后自动退出):
ls
上面的代码永远不会退出,子进程退出时要在控制台中记录的字符串永远不会显示在屏幕上。如果删除while循环,则所有子进程最终都不会出现问题,但是同时允许有多少个进程没有限制。
为什么我的代码无法正常工作,如何正确限制循环中产生的子进程的数量?任何帮助将不胜感激!
答案 0 :(得分:1)
您的代码不起作用,因为 yarn add --dev @types/jest @types/react-navigation
import { NavigationScreenProps } from "react-navigation";
export interface ISignInProps extends NavigationScreenProps<{}> { userStore: IUserStore }
export class SignInScreen extends React.Component { .... }
是非阻塞的,异步的。它所做的只是启动生成操作,然后立即返回。因此,您的lsCommand()
循环开始运行,然后您的for
循环在while
循环的第一次迭代中运行,并启动了最多for
个调用,然后退出了。 lsCommand()
循环的后续迭代没有其他事情要做,因为for
max
调用已经在运行。因此,由于lsCommand()
是非阻塞的,因此您的lsCommand()
循环完成了,它所做的只是开始for
max
操作,然后循环完成了。您要做的是,必须注意每个lsCommand()
ls.on('close')`的完成情况,然后在每个完成时都可以启动另一个。您可以在下面的代码中看到我的操作方式。
您可以执行以下操作,在其中创建一个内部函数,该函数具有一个循环来启动进程,直到达到您的极限,然后您只需在每次生成操作完成后继续调用该函数(每次将再次触发该函数)一完成):
lsCommand() by monitoring
有关更多通用实现,请参见以下内容:
Loop through an api get request with variable URL
Promise.all consumes all my RAM
Javascript - how to control how many promises access network in parallel