- node.jsで
- 時間のかかるローカル処理。。例えばStable Diffustionとか・・重々しいバッチ処理とかをchild_processで処理しているが、
- ローカルの処理はspawnで非同期にしているので
- これをasync queueで待ち行列にしたい。
やりかた
const { spawn } = require('node:child_process')
const async = require('async')
const heavyTask = (data) => {
return new Promise((resolve) => {
// なんかでかくて重い処理、例えばrm -rf / など。
const result = spawn('very_heavy_task.sh', [])
// 処理が終わった時に呼ばれる
result.on('close', (code) => {
resolve()
}
}
}
const workQueue = async.queue(heavyTask)
workQueue.push({data})
重い処理全体をPromise()で包んで、処理が終わったハンドラ内でresolve()するのがポイント。