Ошибка компиляции в рабочем потоке в Typescript - PullRequest
0 голосов
/ 22 января 2020

Этот код из https://medium.com/@Trott / using-worker-threads-in- node-js -80494136dbb6 ;
Я изменил его для записи в Typescript, но у меня ошибка компиляции on:

test_workers_numbers.ts: 50: 18 - ошибка TS2304: не удается найти имя 'workerData'.
50 generatePrimes (workerData.start, workerData.range)



В чем проблема?

'use strict';
import {Worker, isMainThread, parentPort} from 'worker_threads';
const min = 2;
let primes:number[] = [];

function generatePrimes(start: number, range: number) {
  let isPrime = true;
  let end = start + range;
  for (let i = start; i < end; i++) {
    for (let j = min; j < Math.sqrt(end); j++) {
      if (i !== j && i%j === 0) {
        isPrime = false;
        break;
      }
    }
    if (isPrime) {
      primes.push(i);
    }
    isPrime = true;
  }
}

if (isMainThread) {
  const max = 1e7;
  const threadCount = +process.argv[2] || 2;
  const threads = new Set<Worker>();;
  console.log(`Running with ${threadCount} threads...`);
  const range = Math.ceil((max - min) / threadCount);
  let start = min;
  for (let i = 0; i < threadCount - 1; i++) {
    const myStart = start;
    threads.add(new Worker(__filename, { workerData: { start: myStart, range }}));
    start += range;
  }
  threads.add(new Worker(__filename, { workerData: { start, range: range + ((max - min + 1) % threadCount)}}));
  for (let worker of Array.from(threads)) {
    worker.on('error', (err) => { throw err; });
    worker.on('exit', () => {
      threads.delete(worker);
      console.log(`Thread exiting, ${threads.size} running...`);
      if (threads.size === 0) {
        console.log(primes.join('\n'));
      }
    })
    worker.on('message', (msg) => {
      primes = primes.concat(msg);
    });
  }
} else {
  generatePrimes(workerData.start, workerData.range);
  parentPort.postMessage(primes);
}

1 Ответ

0 голосов
/ 22 января 2020

worker.workerData - это произвольное значение JavaScript, которое содержит клон данных, переданных в конструктор Worker этого потока, поэтому его необходимо импортировать. Подробнее ЗДЕСЬ

...