【问题标题】:Is it possible to create a child process to handle some tasks in Node?是否可以创建一个子进程来处理 Node 中的某些任务?
【发布时间】:2018-01-18 05:21:10
【问题描述】:

我有一段非常庞大且编写​​得非常糟糕的代码,最终导致 Node JS 主进程崩溃。可能有很多内存泄漏。我尝试修复它,但它非常糟糕。 (单字母变量等)

有时它会在 10 秒内崩溃,有时会在 5 小时后崩溃,但它会崩溃。

这不是关键任务。它正在尝试使用 IMAP 阅读电子邮件。

我现在不想集成队列处理器。我可以简单地用 Node JS 创建一个子实例,在这个范围内运行这个代码块吗?有什么正确的做法吗?

【问题讨论】:

  • 显示你想要运行的代码块
  • @SandipGhosh 为什么重要?你可以想象任何代码。它必须在单独的守护进程/实例/任何东西上运行。
  • 您要询问的内容取决于您尝试执行的代码类型。您可能能够简单地使用承诺而不是子进程来处理任务,或者如果它是关于读取和写入流,则可以使用管道。
  • @SandipGhosh 这是一些垃圾代码,一段时间后内存泄漏和崩溃节点。这不是关于承诺什么的。我想在主节点进程之外运行这段代码。可以把它想象成依赖一些队列系统或 cron。
  • 你能添加你的错误吗,你的 node.js 是什么崩溃了?

标签: node.js


【解决方案1】:

您可以使用child_process module 中的.spawn().exec()。如果您正在运行 node.js 脚本,那么您正在运行的程序是 node 并且您将要运行的脚本指定为第一个参数,它将在另一个进程中运行,并且脚本的任何其他参数作为后续论据。

你只需将麻烦的代码分离到它自己的node.js脚本中,然后你就可以这样运行它。

如果您想了解更多关于 spawn 和 exec 之间的区别,这是一个good article

【讨论】:

  • 为什么投反对票?这不是OP所要求的吗?如何在另一个进程中运行他们的一些 Javascript?
  • 你得到了我的支持。你知道我如何传递一个端口变量吗?
  • @Aris - 你读过child_process.spawn() 的文档吗?它显示了如何传递命令行参数或环境变量。任何一个都可用于传递端口号,因为您正在运行的脚本可以访问process.argvprocess.env 中的命令行参数或环境变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
相关资源
最近更新 更多