Основная проблема, которую вы пытаетесь решить,
Предполагается использовать несколько экземпляров кукловода для одновременной обработки входных строк.
Очередь обещаний
Вы можете использовать довольно простое решение, включающее простую очередь обещаний.Мы можем использовать пакет p-queue
для ограничения параллелизма по своему желанию.Я использовал это в нескольких проектах очистки, чтобы всегда тестировать вещи.
Вот как вы можете это использовать.
// emails to handle
let emails = [a, b, c, d, e, ];
// create a promise queue
const PQueue = require('p-queue');
// create queue with concurrency, ie: how many instances we want to run at once
const queue = new PQueue({
concurrency: 1
});
// single task processor
const createInstance = async (email) => {
let instance = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=${proxy}`,
]
});
instance._own = {
proxy,
tor: control,
numInstance: i,
};
console.log('email:', email)
return instance;
}
// add tasks to queue
for (let email of emails) {
queue.add(async () => createInstance(email))
}
Общая проблема с бесконечным циклом пула
Я удалил всесвоего рода код, связанный с кукловодом, из вашего примера кода и видел, как он все еще генерирует бесконечный вывод на консоль.
create instance 70326
create instance 70327
create instance 70328
create instance 70329
create instance 70330
create instance 70331
...
Теперь, если вы протестируете несколько раз, вы увидите, что он будет запускать цикл, только если вычто-то в вашем коде не работает.Виновным является это pool.acquire()
обещание, которое просто ставит в очередь ошибку.
Чтобы найти причину сбоя, используйте следующие события:
pool.on("factoryCreateError", function(err) {
console.log('factoryCreateError',err);
});
pool.on("factoryDestroyError", function(err) {
console.log('factoryDestroyError',err);
});
Есть некоторые проблемы, связанные сна это:
- acqu () никогда не разрешает / отклоняет, если фабрика всегда отклоняет, здесь .
- О функции получения в pool.js, здесь .
- .acquire () не отклоняется при сбое создания ресурса, здесь .
Удачи!