@edgenets/utils 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/queue/index.js +14 -34
- package/dist/queue/index.js.map +1 -1
- package/dist/queue/queue.d.ts +1 -0
- package/dist/queue/queue.d.ts.map +1 -1
- package/dist/queue/queue.js +14 -11
- package/dist/queue/queue.js.map +1 -1
- package/package.json +1 -1
package/dist/queue/index.js
CHANGED
@@ -1,35 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
const
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
const
|
13
|
-
|
14
|
-
|
15
|
-
if (requestCount < TOTAL_REQUESTS) {
|
16
|
-
for (let i = 0; i < REQUESTS_PER_SECOND; i++) {
|
17
|
-
if (requestCount < TOTAL_REQUESTS) {
|
18
|
-
queue.addTask(() => apiRequest(requestCount++));
|
19
|
-
}
|
20
|
-
}
|
21
|
-
}
|
22
|
-
else {
|
23
|
-
clearInterval(interval);
|
24
|
-
}
|
25
|
-
}, 1000);
|
26
|
-
const statusInterval = setInterval(() => {
|
27
|
-
const status = queue.getStatus();
|
28
|
-
console.log(`[Queue][Length: ${status.queueLength}][Active: ${status.activeTasks}][Completed: ${status.completedTasksSinceLastOutput}][Total completed: ${status.totalCompletedTasks}][Execution: ${status.totalExecutionTime.toFixed(2)} seconds]`);
|
29
|
-
if (status.totalCompletedTasks >= TOTAL_REQUESTS) {
|
30
|
-
clearInterval(statusInterval);
|
31
|
-
}
|
32
|
-
}, 1000);
|
33
|
-
};
|
34
|
-
startRequests();
|
1
|
+
import { queue } from "./queue.js";
|
2
|
+
// 生成1万条不同等待时间的任务
|
3
|
+
for (let i = 0; i < 10000; i++) {
|
4
|
+
const waitTime = Math.floor(Math.random() * 5000 + 3000); // 随机等待时间,3000到8000毫秒
|
5
|
+
queue.addTask(async () => {
|
6
|
+
await new Promise((resolve) => setTimeout(resolve, waitTime));
|
7
|
+
// console.log(`Task ${i + 1} completed after ${waitTime} ms`);
|
8
|
+
});
|
9
|
+
}
|
10
|
+
// 每秒显示队列状态
|
11
|
+
setInterval(() => {
|
12
|
+
const status = queue.getStatus();
|
13
|
+
console.log(`[Queue][Length: ${status.queueLength}][Active: ${status.activeTasks}][Completed: ${status.completedTasksSinceLastOutput}][Total completed: ${status.totalCompletedTasks}][Execution: ${status.totalExecutionTime.toFixed(2)} seconds]`);
|
14
|
+
}, 1000);
|
35
15
|
//# sourceMappingURL=index.js.map
|
package/dist/queue/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,iBAAiB;AACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,qBAAqB;IAC/E,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QACvB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9D,+DAA+D;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,WAAW;AACX,WAAW,CAAC,GAAG,EAAE;IACf,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACjC,OAAO,CAAC,GAAG,CACT,mBAAmB,MAAM,CAAC,WAAW,aAAa,MAAM,CAAC,WAAW,gBAAgB,MAAM,CAAC,6BAA6B,sBAAsB,MAAM,CAAC,mBAAmB,gBAAgB,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CACxO,CAAC;AACJ,CAAC,EAAE,IAAI,CAAC,CAAC"}
|
package/dist/queue/queue.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK;IAChB,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,6BAA6B,CAAa;IAClD,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,SAAS,CAAa;gBAElB,aAAa,GAAE,MAAa,EAAE,WAAW,GAAE,MAAW;IAK3D,OAAO,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAOlC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK;IAChB,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,6BAA6B,CAAa;IAClD,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,SAAS,CAAa;gBAElB,aAAa,GAAE,MAAa,EAAE,WAAW,GAAE,MAAW;IAK3D,OAAO,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAOlC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B7C,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAOnB,SAAS,IAAI;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,6BAA6B,EAAE,MAAM,CAAC;QACtC,mBAAmB,EAAE,MAAM,CAAC;QAC5B,kBAAkB,EAAE,MAAM,CAAC;KAC5B;CAWF;AAGD,eAAO,MAAM,KAAK,OAAc,CAAC"}
|
package/dist/queue/queue.js
CHANGED
@@ -23,49 +23,52 @@ export class Queue {
|
|
23
23
|
this.startTime = Date.now();
|
24
24
|
this.startStatusInterval();
|
25
25
|
while (this.tasks.length > 0 || this.activeTasks > 0) {
|
26
|
-
const
|
27
|
-
const
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
const tasksToStart = Math.min(this.requestRate, this.tasks.length, this.maxConcurrent - this.activeTasks);
|
27
|
+
const tasksBatch = this.tasks.splice(0, tasksToStart);
|
28
|
+
tasksBatch.forEach((task) => {
|
29
|
+
this.activeTasks++;
|
30
|
+
task().finally(() => {
|
31
|
+
this.activeTasks--;
|
32
|
+
this.completedTasksSinceLastOutput++;
|
33
|
+
this.totalCompletedTasks++;
|
34
|
+
});
|
35
|
+
});
|
36
|
+
await new Promise((resolve) => setTimeout(resolve, 1000)); // 等待1秒
|
31
37
|
}
|
32
38
|
this.stopStatusInterval();
|
33
39
|
this.isProcessing = false;
|
34
40
|
}
|
35
|
-
// 延迟执行
|
36
41
|
delay(ms) {
|
37
42
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
38
43
|
}
|
39
|
-
// 更新活动任务计数
|
40
44
|
updateActiveTasks() {
|
41
45
|
this.activeTasks--;
|
42
46
|
this.completedTasksSinceLastOutput++;
|
43
47
|
this.totalCompletedTasks++;
|
44
48
|
}
|
45
|
-
// 开始状态间隔
|
46
49
|
startStatusInterval() {
|
47
50
|
this.statusInterval = setInterval(() => {
|
48
51
|
// 状态输出由使用类处理
|
49
52
|
}, 1000);
|
50
53
|
}
|
51
|
-
// 停止状态间隔
|
52
54
|
stopStatusInterval() {
|
53
55
|
if (this.statusInterval) {
|
54
56
|
clearInterval(this.statusInterval);
|
55
57
|
this.statusInterval = null;
|
56
58
|
}
|
57
59
|
}
|
58
|
-
// 获取当前状态
|
59
60
|
getStatus() {
|
60
61
|
const status = {
|
61
62
|
queueLength: this.tasks.length,
|
62
63
|
activeTasks: this.activeTasks,
|
63
64
|
completedTasksSinceLastOutput: this.completedTasksSinceLastOutput,
|
64
65
|
totalCompletedTasks: this.totalCompletedTasks,
|
65
|
-
totalExecutionTime: (Date.now() - this.startTime) / 1000 // 总执行时间(秒)
|
66
|
+
totalExecutionTime: (Date.now() - this.startTime) / 1000, // 总执行时间(秒)
|
66
67
|
};
|
67
68
|
this.completedTasksSinceLastOutput = 0; // 重置计数
|
68
69
|
return status;
|
69
70
|
}
|
70
71
|
}
|
72
|
+
// 使用单例模式导出队列实例
|
73
|
+
export const queue = new Queue();
|
71
74
|
//# sourceMappingURL=queue.js.map
|
package/dist/queue/queue.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,KAAK;IACR,YAAY,GAAY,KAAK,CAAC;IAC9B,WAAW,GAAW,CAAC,CAAC;IACf,aAAa,CAAS;IACtB,WAAW,CAAS;IACpB,KAAK,GAA4B,EAAE,CAAC;IAC7C,cAAc,GAA0B,IAAI,CAAC;IAC7C,6BAA6B,GAAW,CAAC,CAAC;IAC1C,mBAAmB,GAAW,CAAC,CAAC;IAChC,SAAS,GAAW,CAAC,CAAC;IAE9B,YAAY,gBAAwB,IAAI,EAAE,cAAsB,EAAE;QAChE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,OAAO,CAAC,IAAyB;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,eAAe;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":"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"}
|