A worker pool for bun,nodejs,browser,deno..run cpu intensive tasks in parallel.
npm i @pouchlab/worker-poolversion >= 2.5.0
- added params - now you can add parameters to functions i.e Maps,Sets,Objects... .
import Pqueue from "@pouchlab/worker-pool";
//numWorkers no longer needed,workers are determined by cpus.
let p = new Pqueue()
p.addJob({id: "one",delay:0,fn:async function (){
return {mm:"h" }
}})//no cb
//add bulk
p.addJobs([{id: "one",delay:0,fn:async function (){
return {mm:"h" }
}},{id: "one2",delay:0,fn:async function (){
return {mm:"h2" }
}}],(result)=>{
console.log(result) //cb
})
// or
// for(let i=0;i< 10;i++){
// p.addJob({id: "two"+i ,delay:1000,fn:async function (){
// return {mm:"h" }
// }})
// }
//with params
p.addJob({params: {fn:async()=>{},m:new Map().set("bb",{a:3})},fn: async function(pr){
console.log(pr.m.get("bb").a)
}},(ev)=>{
console.log(ev)
})
p.addJob({id: "one2",delay:0,fn: async function (){
return {mm:"h" }
}},(data)=>{
//cb listener for results
console.log(data)
})
//listens for completed jobs globally
p.onCompleted((d)=>{console.log(d,"g")})
//listens for errors on workers
p.workers.onError(er=>console.log(er,"er"))
console.log(p.workers)
//listens for failed jobs
p.onError((e)=>console.log(e))
//on failed jobs
p.onFailedJobs((j)=>console.log(j))
//clear all completed jobs to free memory
console.log(await p.clear())support the development of this project,financial and code contribution are welcomed. Made with love by Pouchlabs