Skip to content

介绍

ChildPoolJob基于node.js子进程实现。可以创建一批进程常驻内存,传递任务后直接执行,没有创建、销毁进程的性能开销。

使用方法

javascript
const { ChildPoolJob } = require('ee-core/jobs');

const pool = new ChildPoolJob();

API列表

pool.children

类属性,返回通过run() / runPromise() 创建的实例对象集合。

pool.max

类属性,最大进程数

pool.strategy

类属性,进程选举算法,默认 'polling' 轮询

pool.weights

类属性,权重

pool.LB

类属性,负载均衡器

pool.create(number = 3)

  • number [Int] - 要创建的进程数量

创建一个池子,返回 pids

javascript
pool.create(3).then(pids => {
  // ...
});

pool.run(filepath, params = {})

  • filepath [String] - ./jobs 目录的相对路径;或者绝对路径。
  • params [Object] - 传递的参数

从进程池中选举出一个进程,然后执行一个job文件。

javascript
# ./electron/service/example.js

const timerTask = pool.run('./jobs/example/timer', {jobId});

pool.runPromise(filepath, params = {})

run()的异步语法

pool.getPids()

获取当前pids数组。

pool.getChildByPid(pid)

  • pid [Int]

通过pid获取一个子进程对象

pool.killAll()

关闭所有进程。

EventEmitter

ChildPoolJob继承于events模块,因此实例化后的对象,可以使用EventEmitter所有方法

ForkProcess

通过run() / runPromise() 返回的进程对象。

javascript
const myProc = pool.run('./jobs/example/timer', {jobId});

# or
pool.runPromise('./jobs/example/timer', {jobId}).then(myProc => {
  let eventName = 'job-timer-progress-' + jobId;
  myProc.emitter.on(eventName, (data) => {
    // ...
  })
});

myProc.emitter

实例化后的EventEmitter模块对象。

  • 方法列表:
javascript
emitter.addListener(eventName, listener)
emitter.emit(eventName[, ...args])
emitter.eventNames()
emitter.getMaxListeners()
emitter.listenerCount(eventName)
emitter.listeners(eventName)
emitter.off(eventName, listener)
emitter.on(eventName, listener)
emitter.once(eventName, listener)
emitter.prependListener(eventName, listener)
emitter.prependOnceListener(eventName, listener)
emitter.removeAllListeners([eventName])
emitter.removeListener(eventName, listener)
emitter.setMaxListeners(n)
emitter.rawListeners(eventName)
emitter[Symbol.for('nodejs.rejection')](err, eventName[, ...args])
  • 使用
javascript
pool.runPromise('./jobs/example/timer', {jobId}).then(myProc => {
  let eventName = 'job-timer-progress-' + jobId;
  myProc.emitter.on(eventName, (data) => {
    // ...
  })
});

myProc.child

通过child_process模块,fork出来的进程对象。

myProc.pid

子进程pid

myProc.dispatch(cmd, jobPath = '', params = {})

分发任务

myProc.kill()

  • timeout [Int] - 默认 1000ms

kill子进程

myProc.sleep()

sleep(仅Unix平台)

myProc.wakeup()

wakeup (仅Unix平台)