首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点child_processes不并发执行

节点child_processes不并发执行
EN

Stack Overflow用户
提问于 2021-04-14 01:28:16
回答 2查看 60关注 0票数 0

背景

我想以编程的方式导航到不同浏览器选项卡中的多个网站。理想情况下,当代码被触发时,我希望能够同时加载这些网站。

问题

作为概念的证明,我有以下代码通过命令打开浏览器。

代码语言:javascript
复制
const { exec } = require("child_process");

exec('xdg-open https://www.google.com').on('exit', () => {console.log('child 1 exited')})
exec('xdg-open https://www.github.com').on('exit', () => {console.log('child 2 exited')})

当我运行上面的代码时会发生什么:

  1. 运行代码后,几乎立即记录了child 1 exitedchild 2 exited
  2. 浏览器选项卡将打开并开始加载其中一个页面。在加载第一页之后,在第二个选项卡打开并开始加载第二个页面之前,我不得不等待大约3秒。

++

我希望这两个选项卡几乎同时打开并开始加载页面,但这并没有发生。

其他意见

我尝试在单独的终端中运行xdg-open https://www.google.comxdg-open https://www.github.com (大约同时执行这两个选项卡),并且我能够打开两个选项卡,并在大约同一时间开始加载页面(这是我的目标行为)。

但是,上面的代码的行为似乎与运行xdg-open https://www.google.com && xdg-open https://www.github.com类似。

问题

如果exec()生成了一个新的child_process,为什么上面的代码不同时触发多个页面导航?我如何实现这种行为?

EN

回答 2

Stack Overflow用户

发布于 2021-04-14 05:43:10

我建议你使用从国家预防机制开放。从Node.js应用程序中打开多个URL将是一个很好的选择。

代码语言:javascript
复制
const open = require('open');

const main = async () => {
  await open('https://www.github.com');
  await open('https://google.com');
}

main();

此代码将并行打开这些URL,并在选定的默认浏览器中打开。但是,您可以更改open中的配置以将动态配置传递给它。有关更多细节,请查看这里

您不应该使用child_process打开这样的任务,因为它不需要任何计算。当Node.js主循环在单线程上运行时,当CPU无法处理阻塞请求时,通常会调用这些请求。您可以检查这里以了解何时使用child_process的更多细节。

票数 0
EN

Stack Overflow用户

发布于 2021-04-20 11:22:13

我发现只有当我的默认浏览器设置为Firefox时才会出现此问题。如果我的默认浏览器设置为chrome,两个浏览器选项卡将同时打开,并开始从两个网站(同时)获取数据。

我在这里发布了这个观察,以防有人发现它有用,但我还没有找到一个解决方案来使这个问题与Firefox一起工作。

编辑:

更多观察

当我试图以同样的方式打开更多的网站(例如10个网站)时,firefox将分两批打开(每批之间有一些延迟)。在每一批,多个网站将同时开放。到目前为止,它似乎将始终开放2批。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67084351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档