我正在构建一个代理检查程序,但在尝试创建“工作池”时遇到了问题 并发工作人员。
例如: 我想要 10 个并发工作人员,这将检查代理数量(假设为 50 个),当我检查 50 个代理时,停止检查并写入文件并退出。
问题是在我达到限制数量后,异步函数仍在运行。
代码:
const EventEmitter = require('events');
const emtr = new EventEmitter();
const EVENTS_TYPES = {
INCREMENT: "INCREMENT",
FINISH: "FINISH"
}
const Variables = {
MAX_WORKERS: 10,
// example data
proxies: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,
43,44,45,46,47,48,49,50,
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,
27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,
43,44,45,46,47,48,49,50],
proxyIdx: 0,
proxyScanned: 0,
MAX_PROXY_TO_SCAN: 50
}
emtr.on(EVENTS_TYPES.INCREMENT, () => {
Variables.proxyScanned++;
console.log("proxyScanned atm: " + Variables.proxyScanned);
if (Variables.proxyScanned == Variables.MAX_PROXY_TO_SCAN) {
emtr.emit(EVENTS_TYPES.FINISH)
return;
}
// keep checking
Variables.proxyIdx++;
AsyncCheckProxies(Variables.proxies[Variables.proxyIdx])
})
emtr.on(EVENTS_TYPES.FINISH, () => {
// write to file..
console.log('finish')
// process.exit(1)
})
async function AsyncCheckProxies(proxy) {
// do some async functions
// mock Async
setTimeout(() => {
emtr.emit(EVENTS_TYPES.INCREMENT);
});
//
}
function main() {
// Workers pool.
for (Variables.proxyIdx; Variables.proxyIdx < Variables.MAX_WORKERS; Variables.proxyIdx++)
AsyncCheckProxies(Variables.proxies[Variables.proxyIdx]);
}
main()
似乎异步函数一直在运行。