Estoy tratando de hacer que un singleton funcione en varios subprocesos en node/ts. Pero por alguna razón, solo el bucle de eventos principal tiene acceso a él. ¿Hay alguna manera de que pueda actualizar un singleton en el ciclo principal y que los cambios se reflejen en un subproceso de trabajo? Aquí está el código -
data_source.ts
class DataSource { private _data: any constructor() { this._data = [] } set(data: any) { this._data.push(data) } get(id: any) { return this._data.find((d: any) => d.id === id) } } const instance = new DataSource(); Object.freeze(instance) export default instance index.ts
let workerpool = require('workerpool') import DataSource from './data_source' import { test } from './worker' console.log(DataSource) function main () { let pool = workerpool.pool() pool.exec(test, []) setInterval(() => { DataSource.set({id: 'asd'}) }, 1000) } main() worker.ts
import DataSource from './data_source' export function test() { setInterval(() => { console.log(DataSource) console.log("test") }, 500) } Como puede ver, main.ts ejecuta un trabajador que "debería" registrar en la consola DataSource singleton cada 0,5 s, mientras que main.ts agrega un nuevo elemento a DataSource cada segundo.
Esto funciona si emito la siguiente línea desde el trabajador - console.log(DataSource) , una cadena de "prueba" se registra correctamente cada 0,5 s. Pero, cuando intento consolar el registro de DataSource en mi subproceso de trabajo, se registra correctamente solo la primera vez, y después parece que el intervalo del bucle principal se hace cargo por completo del singleton y rompe por completo al trabajador, y deja de registrar cualquier cosa. .
Estoy tratando de usar singleton como programa, bucle principal como programador y trabajador como ejecutor (que verifica el programa cada segundo).
¡Gracias!