From 5fb417fafa5fbb01a500253b449f8fd129335bad Mon Sep 17 00:00:00 2001 From: James M Snell Date: Wed, 12 May 2021 15:10:32 -0700 Subject: [PATCH 1/2] process: add `'worker'` event Provides a new `process.on('worker', (worker) => {})` event that is triggered by the creation of a new `worker_thread.Worker`. The use case is to allow hooks to be installed for monitoring workers without having to modify the call sites around those. Signed-off-by: James M Snell --- doc/api/process.md | 9 +++++++++ lib/internal/worker.js | 2 ++ test/parallel/test-worker-event.js | 13 +++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 test/parallel/test-worker-event.js diff --git a/doc/api/process.md b/doc/api/process.md index 1eff6a5b261abc..e0ab670747516b 100644 --- a/doc/api/process.md +++ b/doc/api/process.md @@ -457,6 +457,15 @@ of the custom deprecation. The `*-deprecation` command-line flags only affect warnings that use the name `'DeprecationWarning'`. +### Event: `'worker'` + + +* `worker` {Worker} The {Worker} that was created. + +The `'worker'` event is emitted after a new {Worker} thread has been created. + #### Emitting custom warnings See the [`process.emitWarning()`][process_emit_warning] method for issuing diff --git a/lib/internal/worker.js b/lib/internal/worker.js index f1da0d4ded4cea..f2414ebeec4aae 100644 --- a/lib/internal/worker.js +++ b/lib/internal/worker.js @@ -266,6 +266,8 @@ class Worker extends EventEmitter { }; // Actually start the new thread now that everything is in place. this[kHandle].startThread(); + + process.nextTick(() => process.emit('worker', this)); } [kOnExit](code, customErr, customErrReason) { diff --git a/test/parallel/test-worker-event.js b/test/parallel/test-worker-event.js new file mode 100644 index 00000000000000..9d6056e1091468 --- /dev/null +++ b/test/parallel/test-worker-event.js @@ -0,0 +1,13 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const { + Worker, +} = require('worker_threads'); + +process.on('worker', common.mustCall(({ threadId }) => { + assert.strictEqual(threadId, 1); +})); + +new Worker('', { eval: true }); From 046c1cab2bc13a0f79dbe7f42cdff5bd2c09710b Mon Sep 17 00:00:00 2001 From: James M Snell Date: Wed, 12 May 2021 15:34:29 -0700 Subject: [PATCH 2/2] tools: add `Worker` to type-parser Signed-off-by: James M Snell --- test/parallel/test-worker-event.js | 3 ++- tools/doc/type-parser.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/test/parallel/test-worker-event.js b/test/parallel/test-worker-event.js index 9d6056e1091468..01e95ead8316cb 100644 --- a/test/parallel/test-worker-event.js +++ b/test/parallel/test-worker-event.js @@ -4,10 +4,11 @@ const common = require('../common'); const assert = require('assert'); const { Worker, + threadId: parentThreadId, } = require('worker_threads'); process.on('worker', common.mustCall(({ threadId }) => { - assert.strictEqual(threadId, 1); + assert.strictEqual(threadId, parentThreadId + 1); })); new Worker('', { eval: true }); diff --git a/tools/doc/type-parser.js b/tools/doc/type-parser.js index f2b953358d03ce..4fd91f4b478149 100644 --- a/tools/doc/type-parser.js +++ b/tools/doc/type-parser.js @@ -223,6 +223,7 @@ const customTypesMap = { 'vm.SourceTextModule': 'vm.html#vm_class_vm_sourcetextmodule', 'MessagePort': 'worker_threads.html#worker_threads_class_messageport', + 'Worker': 'worker_threads.html#worker_threads_class_worker', 'X509Certificate': 'crypto.html#crypto_class_x509certificate',