mirror of
https://gitee.com/dromara/electron-egg.git
synced 2026-05-14 03:52:07 +08:00
job任务优化
This commit is contained in:
@@ -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任务,常驻内存,等待下一个业务
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user