mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-24 22:03:54 +00:00
perf: init token worker (#4726)
* perf: init token worker * init worker * preload worker * preload worker * remove invalid code
This commit is contained in:
@@ -87,9 +87,15 @@ export class WorkerPool<Props = Record<string, any>, Response = any> {
|
||||
this.maxReservedThreads = maxReservedThreads;
|
||||
}
|
||||
|
||||
runTask({ data, resolve, reject }: WorkerRunTaskType<Props>) {
|
||||
private runTask({ data, resolve, reject }: WorkerRunTaskType<Props>) {
|
||||
// Get idle worker or create a new worker
|
||||
const runningWorker = (() => {
|
||||
// @ts-ignore
|
||||
if (data.workerId) {
|
||||
// @ts-ignore
|
||||
const worker = this.workerQueue.find((item) => item.id === data.workerId);
|
||||
if (worker) return worker;
|
||||
}
|
||||
const worker = this.workerQueue.find((item) => item.status === 'idle');
|
||||
if (worker) return worker;
|
||||
|
||||
@@ -157,23 +163,15 @@ export class WorkerPool<Props = Record<string, any>, Response = any> {
|
||||
|
||||
// watch response
|
||||
worker.on('message', ({ id, type, data }: WorkerResponse<Response>) => {
|
||||
// Run callback
|
||||
const workerItem = this.workerQueue.find((item) => item.id === id);
|
||||
|
||||
if (!workerItem) {
|
||||
addLog.warn('Invalid worker', { id, type, data });
|
||||
return;
|
||||
}
|
||||
|
||||
if (type === 'success') {
|
||||
workerItem.resolve(data);
|
||||
item.resolve(data);
|
||||
} else if (type === 'error') {
|
||||
workerItem.reject(data);
|
||||
item.reject(data);
|
||||
}
|
||||
|
||||
// Clear timeout timer and update worker status
|
||||
clearTimeout(workerItem.timeoutId);
|
||||
workerItem.status = 'idle';
|
||||
clearTimeout(item.timeoutId);
|
||||
item.status = 'idle';
|
||||
});
|
||||
|
||||
// Worker error, terminate and delete it.(Un catch error)
|
||||
@@ -191,7 +189,7 @@ export class WorkerPool<Props = Record<string, any>, Response = any> {
|
||||
return item;
|
||||
}
|
||||
|
||||
deleteWorker(workerId: string) {
|
||||
private deleteWorker(workerId: string) {
|
||||
const item = this.workerQueue.find((item) => item.id === workerId);
|
||||
if (item) {
|
||||
item.reject?.('error');
|
||||
|
Reference in New Issue
Block a user