cron作业是否阻止主进程,或者nodejs将创建一个worker来执行cron任务

时间:2015-05-20 23:28:36

标签: node.js process cron backgroundworker cron-task

我每分钟都在使用node-cron来完成一些繁重的任务(更新数据库)。此任务是否使用主进程工作,或者nodejs是否会创建一些工作人员来执行这些操作?

var CronJob = require('cron').CronJob;
new CronJob('0 * * * * *', function() {
  //Update database every minute here
  console.log('Update database every minute');
}, null, true, 'America/Los_Angeles');

3 个答案:

答案 0 :(得分:2)

它应该为你创建一个工作者。它没有在库文档中有详细记录,但是: 1)您可以看到依赖项,它依赖于node-worker。 2)如果cron作业被阻塞,那么等待执行cron作业(在这种情况下,一分钟)也会阻塞。这是因为主线程只会等到必须这样做。在这种情况下,它将不是cron作业,因为它将是一个简单的sleep()然后执行。

虽然,如果你想确定,尝试使用"做一个nodejs主程序,而真实"并且里面可能正在向控制台写东西。并制作一个cronjob,它每分钟都会执行一个sleep()命令。预期的症状是控制台中的写作永远不会停止..

希望这会有所帮助.. 干杯

答案 1 :(得分:1)

任何阻塞操作确实会阻塞,至少使用node-cron会阻塞。

我尝试使用expressjs应用程序,其中cron作业尝试定期从Web上获取数据:

// app.js
...

/* Routes */

app.use("/", valueRoutes);

/* Cron Job */

cron.schedule(CRON_EXP, refreshData); // long running asyn operation

export default app;

在执行refreshData方法期间,Express应用程序无法响应请求。

答案 2 :(得分:0)

此问题已在此处解决:https://github.com/node-cron/node-cron/issues/114

内部node-cron在setTimeout内部异步执行给定功能。 但是,如果在函数内部,如果您进行了一些阻塞,那么它将阻塞您的所有线程。