任务队列

This commit is contained in:
2023-02-14 01:02:53 +08:00
parent 87d683c94d
commit ccc15f4124

View File

@@ -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
} }