worker-farm
Advanced tools
Comparing version 1.5.4 to 1.6.0
@@ -5,2 +5,2 @@ 'use strict' | ||
callback(null, inp + ' BAR (' + process.pid + ')') | ||
} | ||
} |
@@ -13,2 +13,2 @@ 'use strict' | ||
}) | ||
} | ||
} |
@@ -22,2 +22,2 @@ 'use strict' | ||
callback(null, (inside / points) * 4) | ||
} | ||
} |
'use strict' | ||
const DEFAULT_OPTIONS = { | ||
maxCallsPerWorker : Infinity | ||
workerOptions : {} | ||
, maxCallsPerWorker : Infinity | ||
, maxConcurrentWorkers : (require('os').cpus() || { length: 1 }).length | ||
@@ -14,4 +15,3 @@ , maxConcurrentCallsPerWorker : 10 | ||
const extend = require('xtend') | ||
, fork = require('./fork') | ||
const fork = require('./fork') | ||
, TimeoutError = require('errno').create('TimeoutError') | ||
@@ -23,3 +23,3 @@ , ProcessTerminatedError = require('errno').create('ProcessTerminatedError') | ||
function Farm (options, path) { | ||
this.options = extend(DEFAULT_OPTIONS, options) | ||
this.options = Object.assign({}, DEFAULT_OPTIONS, options) | ||
this.path = path | ||
@@ -108,3 +108,3 @@ this.activeCalls = 0 | ||
let forked = fork(this.path) | ||
let forked = fork(this.path, this.options.workerOptions) | ||
, id = this.childId | ||
@@ -111,0 +111,0 @@ , c = { |
@@ -7,3 +7,3 @@ 'use strict' | ||
function fork (forkModule) { | ||
function fork (forkModule, workerOptions) { | ||
// suppress --debug / --inspect flags while preserving others (like --harmony) | ||
@@ -13,7 +13,8 @@ let filteredArgs = process.execArgv.filter(function (v) { | ||
}) | ||
, child = childProcess.fork(childModule, process.argv, { | ||
execArgv: filteredArgs | ||
, env: process.env | ||
, cwd: process.cwd() | ||
}) | ||
, options = Object.assign({ | ||
execArgv : filteredArgs | ||
, env : process.env | ||
, cwd : process.cwd() | ||
}, workerOptions) | ||
, child = childProcess.fork(childModule, process.argv, options) | ||
@@ -20,0 +21,0 @@ child.on('error', function() { |
@@ -34,2 +34,2 @@ 'use strict' | ||
module.exports = farm | ||
module.exports.end = end | ||
module.exports.end = end |
{ | ||
"name": "worker-farm", | ||
"description": "Distribute processing tasks to child processes with an über-simple API and baked-in durability & custom concurrency options.", | ||
"version": "1.5.4", | ||
"version": "1.6.0", | ||
"homepage": "https://github.com/rvagg/node-worker-farm", | ||
@@ -21,4 +21,3 @@ "authors": [ | ||
"dependencies": { | ||
"errno": "~0.1.7", | ||
"xtend": "~4.0.1" | ||
"errno": "~0.1.7" | ||
}, | ||
@@ -25,0 +24,0 @@ "devDependencies": { |
@@ -106,3 +106,4 @@ # Worker Farm [![Build Status](https://secure.travis-ci.org/rvagg/node-worker-farm.png)](http://travis-ci.org/rvagg/node-worker-farm) | ||
{ | ||
maxCallsPerWorker : Infinity | ||
workerOptions : {} | ||
, maxCallsPerWorker : Infinity | ||
, maxConcurrentWorkers : require('os').cpus().length | ||
@@ -117,2 +118,4 @@ , maxConcurrentCallsPerWorker : 10 | ||
* **<code>workerOptions</code>** allows you to customize all the parameters passed to child nodes. This object supports [all possible options of `child_process.fork`](https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options). The default options passed are the parent `execArgv`, `cwd` and `env`. Any (or all) of them can be overridden, and others can be added as well. | ||
* **<code>maxCallsPerWorker</code>** allows you to control the lifespan of your child processes. A positive number will indicate that you only want each child to accept that many calls before it is terminated. This may be useful if you need to control memory leaks or similar in child processes. | ||
@@ -119,0 +122,0 @@ |
@@ -16,5 +16,7 @@ 'use strict' | ||
module.exports.args = function (callback) { | ||
console.log(process.argv) | ||
console.log(process.execArgv) | ||
callback() | ||
callback(null, { | ||
argv : process.argv | ||
, cwd : process.cwd() | ||
, execArgv : process.execArgv | ||
}) | ||
} | ||
@@ -21,0 +23,0 @@ |
@@ -7,3 +7,4 @@ 'use strict' | ||
workers.args(function() { | ||
workers.args(function(err, result) { | ||
console.log(result); | ||
workerFarm.end(workers) | ||
@@ -10,0 +11,0 @@ console.log('FINISHED') |
@@ -8,2 +8,3 @@ 'use strict' | ||
, fs = require('fs') | ||
, os = require('os') | ||
@@ -27,3 +28,3 @@ function uniq (ar) { | ||
t.ok(pid > process.pid, 'pid makes sense') | ||
t.ok(pid < process.pid + 500, 'pid makes sense') | ||
t.ok(pid < process.pid + 750, 'pid makes sense') | ||
t.ok(rnd >= 0 && rnd < 1, 'rnd result makes sense') | ||
@@ -45,3 +46,3 @@ }) | ||
t.ok(pid > process.pid, 'pid makes sense') | ||
t.ok(pid < process.pid + 500, 'pid makes sense') | ||
t.ok(pid < process.pid + 750, 'pid makes sense') | ||
t.ok(rnd >= 0 && rnd < 1, 'rnd result makes sense') | ||
@@ -358,3 +359,3 @@ }) | ||
t.ok(pid > process.pid, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(pid < process.pid + 500, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(pid < process.pid + 750, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(rnd >= 0 && rnd < 1, 'rnd result makes sense') | ||
@@ -377,3 +378,3 @@ }) | ||
t.ok(pid > process.pid, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(pid < process.pid + 500, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(pid < process.pid + 750, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(rnd > 0 && rnd < 1, 'rnd result makes sense ' + rnd) | ||
@@ -385,3 +386,3 @@ }) | ||
t.ok(pid > process.pid, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(pid < process.pid + 500, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(pid < process.pid + 750, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(rnd > 0 && rnd < 1, 'rnd result makes sense ' + rnd) | ||
@@ -421,3 +422,3 @@ }) | ||
t.ok(pid > process.pid, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(pid < process.pid + 500, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(pid < process.pid + 750, 'pid makes sense ' + pid + ' vs ' + process.pid) | ||
t.ok(rnd > 0 && rnd < 1, 'rnd result makes sense ' + rnd) | ||
@@ -531,2 +532,24 @@ }) | ||
tape('custom arguments can be passed to "fork"', function (t) { | ||
t.plan(3) | ||
// allocate a real, valid path, in any OS | ||
let cwd = fs.realpathSync(os.tmpdir()) | ||
, workerOptions = { | ||
cwd : cwd | ||
, execArgv : ['--no-warnings'] | ||
} | ||
, child = workerFarm({ maxConcurrentWorkers: 1, maxRetries: 5, workerOptions: workerOptions}, childPath, ['args']) | ||
child.args(function (err, result) { | ||
t.equal(result.execArgv[0], '--no-warnings', 'flags passed (overridden default)') | ||
t.equal(result.cwd, cwd, 'correct cwd folder') | ||
}) | ||
workerFarm.end(child, function () { | ||
t.ok(true, 'workerFarm ended') | ||
}) | ||
}) | ||
tape('ensure --debug/--inspect not propagated to children', function (t) { | ||
@@ -533,0 +556,0 @@ t.plan(3) |
47168
1
17
1017
148
- Removedxtend@~4.0.1
- Removedxtend@4.0.2(transitive)