job任务优化

This commit is contained in:
gaoshuaixing
2023-06-21 18:28:01 +08:00
parent 176526dbe0
commit 432083de20
3 changed files with 63 additions and 31 deletions

View File

@@ -23,13 +23,14 @@ class TimerJob extends Job {
Log.info("[child-process] TimerJob params: ", this.params);
// 计时器任务
let eventName = 'job-timer-progress';
let number = 0;
let jobId = this.params.jobId;
let eventName = 'job-timer-progress-' + jobId;
let timer = setInterval(function() {
Hello.welcome();
childMessage.send(eventName, {jobId, number});
childMessage.send(eventName, {jobId, number, end: false});
number++;
}, 1000);
@@ -39,7 +40,7 @@ class TimerJob extends Job {
clearInterval(timer);
// 任务结束,重置前端显示
childMessage.send(eventName, {jobId, number:0, pid:0});
childMessage.send(eventName, {jobId, number:0, pid:0, end: true});
// 如果是childJob任务必须调用 Ps.exit() 方法,让进程退出,否则会常驻内存
// 如果是childPoolJob任务常驻内存等待下一个业务

View File

@@ -68,8 +68,9 @@ class FrameworkService extends Service {
const channel = 'controller.framework.timerJobProgress';
if (action == 'create') {
// 执行任务及监听进度
let eventName = 'job-timer-progress-' + jobId;
const timerTask = this.myJob.exec('./jobs/example/timer', {jobId});
timerTask.emitter.on('job-timer-progress', (data) => {
timerTask.emitter.on(eventName, (data) => {
Log.info('[main-process] timerTask, from TimerJob data:', data);
// 发送数据到渲染进程
event.sender.send(`${channel}`, data)
@@ -77,7 +78,7 @@ class FrameworkService extends Service {
// 执行任务及监听进度 异步
// myjob.execPromise('./jobs/example/timer', {jobId}).then(task => {
// task.emitter.on('job-timer-progress', (data) => {
// task.emitter.on(eventName, (data) => {
// Log.info('[main-process] timerTask, from TimerJob data:', data);
// // 发送数据到渲染进程
// event.sender.send(`${channel}`, data)
@@ -115,12 +116,22 @@ class FrameworkService extends Service {
if (action == 'run') {
// 异步-执行任务及监听进度
this.myJobPool.runPromise('./jobs/example/timer', {jobId}).then(task => {
task.emitter.on('job-timer-progress', (data) => {
// 监听器名称唯一,否则会出现重复监听。
// 任务完成时,需要移除监听器,防止内存泄漏
let eventName = 'job-timer-progress-' + jobId;
task.emitter.on(eventName, (data) => {
Log.info('[main-process] [ChildPoolJob] timerTask, from TimerJob data:', data);
// 发送数据到渲染进程
event.sender.send(`${channel}`, data)
})
// 如果收到任务完成的消息,移除监听器
if (data.end) {
task.emitter.removeAllListeners(eventName);
}
});
res.pid = task.pid;
});
}

View File

@@ -31,30 +31,44 @@
<p></p>
<a-space>
<a-button @click="runJobByPool(3, 'run')">执行任务3</a-button>
进度{{ progress3 }} 进程pid{{ progress3_pid }}
进度{{ progress3 }} 进程pid{{ progress3_pid }}
</a-space>
<p></p>
<a-space>
<a-button @click="runJobByPool(4, 'run')">执行任务4</a-button>
进度{{ progress4 }} 进程pid{{ progress4_pid }}
</a-space>
进度{{ progress4 }} 进程pid{{ progress4_pid }}
</a-space>
<p></p>
<a-space>
<a-button @click="runJobByPool(5, 'run')">执行任务5</a-button>
进度{{ progress5 }} 进程pid{{ progress5_pid }}
</a-space>
<p></p>
<a-space>
<a-button @click="runJobByPool(6, 'run')">执行任务6</a-button>
进度{{ progress6 }} 进程pid{{ progress6_pid }}
</a-space>
</div>
</div>
</template>
<script>
import { ipcApiRoute } from '@/api/main'
import { ipcApiRoute } from '@/api/main';
export default {
data() {
return {
progress1: 0,
progress1_pid: 0,
progress2: 0,
progress2_pid: 0,
progress3: 0,
progress3_pid: 0,
progress4: 0,
progress4_pid: 0,
processPids: '',
progress1: 0,
progress2: 0,
progress3: 0,
progress4: 0,
progress5: 0,
progress6: 0,
progress1_pid: 0,
progress2_pid: 0,
progress3_pid: 0,
progress4_pid: 0,
progress5_pid: 0,
progress6_pid: 0,
}
},
mounted () {
@@ -85,6 +99,14 @@ export default {
this.progress4 = result.number;
this.progress4_pid = result.pid == 0 ? result.pid : this.progress4_pid;
break;
case 5:
this.progress5 = result.number;
this.progress5_pid = result.pid == 0 ? result.pid : this.progress5_pid;
break;
case 6:
this.progress6 = result.number;
this.progress6_pid = result.pid == 0 ? result.pid : this.progress6_pid;
break;
}
})
@@ -103,14 +125,10 @@ export default {
this.$ipc.invoke(ipcApiRoute.someJob, params).then(data => {
switch (data.jobId) {
case 1:
if (data.action == 'create') {
this.progress1_pid = data.result.pid;
}
this.progress1_pid = data.result.pid;
break;
case 2:
if (data.action == 'create') {
this.progress2_pid = data.result.pid;
}
this.progress2_pid = data.result.pid;
break;
}
})
@@ -130,15 +148,17 @@ export default {
this.$ipc.invoke(ipcApiRoute.someJobByPool, params).then(data => {
switch (data.jobId) {
case 3:
if (data.action == 'run') {
this.progress3_pid = data.result.pid;
}
this.progress3_pid = data.result.pid;
break;
case 4:
if (data.action == 'run') {
this.progress4_pid = data.result.pid;
}
this.progress4_pid = data.result.pid;
break;
case 5:
this.progress5_pid = data.result.pid;
break;
case 6:
this.progress6_pid = data.result.pid;
break;
}
})
},