任务队列
This commit is contained in:
@@ -13,11 +13,44 @@ export default defineEventHandler(async event => {
|
|||||||
return { 'message': 'ok' }
|
return { 'message': 'ok' }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 抽取一组任务(优先队列里最多的模型)
|
||||||
|
if (event.node.req.method === 'PATCH') {
|
||||||
|
// 筛选出所有的任务(并打印)
|
||||||
|
let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
|
||||||
|
console.log(tasks)
|
||||||
|
// 按照任务的model字段分组
|
||||||
|
let groups = tasks.reduce((groups: any, task: any) => {
|
||||||
|
let model = task.model
|
||||||
|
if (!groups[model]) {
|
||||||
|
groups[model] = []
|
||||||
|
}
|
||||||
|
groups[model].push(task)
|
||||||
|
return groups
|
||||||
|
})
|
||||||
|
// 按照任务数量排序
|
||||||
|
let sorted = Object.keys(groups).sort((a, b) => groups[b].length - groups[a].length)
|
||||||
|
console.log(sorted)
|
||||||
|
|
||||||
|
// 将抽取到的任务从队列中改变状态
|
||||||
|
for (let task of groups[sorted[0]]) {
|
||||||
|
task.status = 'processing'
|
||||||
|
await useStorage().setItem(`task:${task.tid}`, task)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回数量最多的任务
|
||||||
|
return { 'task': groups[sorted[0]][0] }
|
||||||
|
}
|
||||||
|
|
||||||
// 添加任务到队列(生成一个32位随机字符串作为任务ID)
|
// 添加任务到队列(生成一个32位随机字符串作为任务ID)
|
||||||
if (event.node.req.method === 'POST') {
|
if (event.node.req.method === 'POST') {
|
||||||
event.context.body = await readBody(event) // 读取body数据到
|
event.context.body = await readBody(event) // 读取body数据到
|
||||||
event.context.body.tid = Math.random().toString(36).substring(2, 34)
|
event.context.body.tid = Math.random().toString(36).substring(2, 34)
|
||||||
await useStorage().setItem(`task:${event.context.query.tid}`, event.context.query)
|
event.context.body.status = 'waiting' // 默认当前状态
|
||||||
|
event.context.body.createdAt = new Date().getTime() // 设定创建时间
|
||||||
|
await useStorage().setItem(`task:${event.context.body.tid}`, event.context.body)
|
||||||
|
// 筛选出所有的任务(并打印)
|
||||||
|
let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
|
||||||
|
console.log(tasks)
|
||||||
// 如果无需排队,直接返回结果, 否则返回任务排队状态(预估等待时间)
|
// 如果无需排队,直接返回结果, 否则返回任务排队状态(预估等待时间)
|
||||||
return event.context.body
|
return event.context.body
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user