Browse Source

Make worker start the job

develop
Jerome Wu 6 years ago
parent
commit
a31424e3e7
  1. 21
      src/createJob.js
  2. 43
      src/createWorker.js

21
src/createJob.js

@ -1,30 +1,15 @@
const { let jobCounter = 1;
send,
} = require('./worker/node');
const log = require('./utils/log');
let jobCounter = 0;
module.exports = ( module.exports = (
action, action,
payload, payload,
) => { ) => {
jobCounter += 1;
const id = `Job-${jobCounter}-${Math.random().toString(16).slice(3, 8)}`; const id = `Job-${jobCounter}-${Math.random().toString(16).slice(3, 8)}`;
jobCounter += 1;
const start = async (w) => {
log(`[${w.id}]: Start ${id}, action=${action}`);
send(w.worker, {
workerId: w.id,
jobId: id,
action,
payload,
});
};
return { return {
id, id,
action, action,
start, payload,
}; };
}; };

43
src/createWorker.js

@ -1,6 +1,7 @@
const resolvePaths = require('./utils/resolvePaths'); const resolvePaths = require('./utils/resolvePaths');
const circularize = require('./utils/circularize'); const circularize = require('./utils/circularize');
const createJob = require('./createJob'); const createJob = require('./createJob');
const log = require('./utils/log');
const { defaultOEM } = require('./constants/config'); const { defaultOEM } = require('./constants/config');
const { const {
defaultOptions, defaultOptions,
@ -8,13 +9,14 @@ const {
terminateWorker, terminateWorker,
onMessage, onMessage,
loadImage, loadImage,
send,
} = require('./worker/node'); } = require('./worker/node');
let workerCounter = 0; let workerCounter = 1;
module.exports = (_options = {}) => { module.exports = (_options = {}) => {
workerCounter += 1;
const id = `Worker-${workerCounter}-${Math.random().toString(16).slice(3, 8)}`; const id = `Worker-${workerCounter}-${Math.random().toString(16).slice(3, 8)}`;
workerCounter += 1;
const { const {
logger, logger,
...options ...options
@ -34,47 +36,52 @@ module.exports = (_options = {}) => {
rejects[action] = rej; rejects[action] = rej;
}; };
const doJob = (action, payload = {}) => ( const startJob = (action, payload = {}) => (
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
const { id: jobId } = createJob(action, payload);
log(`[${id}]: Start ${jobId}, action=${action}`);
setResolve(action, resolve); setResolve(action, resolve);
setReject(action, reject); setReject(action, reject);
createJob(action, payload).start({ worker, id }); send(worker, {
workerId: id,
jobId,
action,
payload,
});
}) })
); );
const load = () => ( const load = () => (
doJob('load', { options }) startJob('load', { options })
); );
const loadLanguage = (langs = 'eng') => ( const loadLanguage = (langs = 'eng') => (
doJob('loadLanguage', { langs, options }) startJob('loadLanguage', { langs, options })
); );
const initialize = (langs = 'eng', oem = defaultOEM) => ( const initialize = (langs = 'eng', oem = defaultOEM) => (
doJob('initialize', { langs, oem }) startJob('initialize', { langs, oem })
); );
const setParameters = (params = {}) => ( const setParameters = (params = {}) => (
doJob('setParameters', { params }) startJob('setParameters', { params })
); );
const recognize = async (_image, opts = {}) => { const recognize = async (image, opts = {}) => (
const image = await loadImage(_image); startJob('recognize', { image: await loadImage(image), options: opts })
return doJob('recognize', { image, options: opts }); );
};
const getPDF = (title = 'Tesseract OCR Result', textonly = false) => ( const getPDF = (title = 'Tesseract OCR Result', textonly = false) => (
doJob('getPDF', { title, textonly }) startJob('getPDF', { title, textonly })
); );
const detect = async (_image) => { const detect = async image => (
const image = await loadImage(_image); startJob('detect', { image: await loadImage(image) })
return doJob('detect', { image }); );
};
const terminate = async () => { const terminate = async () => {
if (worker !== null) { if (worker !== null) {
await doJob('terminate'); await startJob('terminate');
terminateWorker(worker); terminateWorker(worker);
worker = null; worker = null;
} }

Loading…
Cancel
Save