Лок прокси в многопотоке

  • Автор темы Автор темы Philipp
  • Дата начала Дата начала

Philipp

Client
Регистрация
14.10.2019
Сообщения
102
Реакции
57
Баллы
28
Подскажите что делаю не так, задача брать из базы прокси, менять статус дабы другие потоки его не использовали, если запускаю шаблон и добавляю по 1 потоку - то всё нормально, прокси лочатся как надо, но если оставляю поток поработать какое-то время - случается путаница и я уже вижу что 10 потоков работает, а залочены только 2 прокси.

Логика такая, перед работой берётся 1 прокси из базы со статусом wait, меняется статус на working, дальше чек на коннект, если нет ответа - другим кубиком прокси обратно в статус wait и берём новый, если отработал шаблон нормально, прокси в статус - wait
 
@VladZen не могу вставить код, ошибку выдаёт


Упс! Мы столкнулись с некоторыми проблемами. Пожалуйста, попробуйте позже. Более детальную информацию об ошибке вы можете посмотреть в консоли браузера
 
А где тут лок то ? это описана работа с метками в базе.
Да, я это имел ввиду. Вопрос в том как найти ошибку в этих метках, есть подозрение на то, что таблица не лочится и поэтому берутся одни и те же прокси в работу
 
Да, я это имел ввиду. Вопрос в том как найти ошибку в этих метках, есть подозрение на то, что таблица не лочится и поэтому берутся одни и те же прокси в работу
лочится не лочится, это как нам понять ? если лочишь в базе, значит где то ошибся. если лочишь в зенке, то значит что то не так сделал. а что не так.... ну нет хрустального шара...
 
Да, я это имел ввиду. Вопрос в том как найти ошибку в этих метках, есть подозрение на то, что таблица не лочится и поэтому берутся одни и те же прокси в работу
С большой вероятностью, у вас обычная ошибка в логике блокировки таблицы.
 
C#:
Развернуть Свернуть Копировать
DB db = new DB(db_host, db_user, db_pswd, db_database, db_charset);
db.query("LOCK TABLES `"+proxy_table+"` WRITE");

Не вставляет полный код, прикрепляю файлом
 

Вложения

Последнее редактирование:


Я правильно понмаю что нужно в общем коде создать новый объект db_locker например и выполнять подключение к базе и все манипуляции уже внутри этого лока?


lock (SyncObjects.db_locker){
Подключение и работа с базой
}
 
Я правильно понмаю что нужно в общем коде создать новый объект db_locker например и выполнять подключение к базе и все манипуляции уже внутри этого лока?


lock (SyncObjects.db_locker){
Подключение и работа с базой
}
Да, операции получения прокси с проверкой и сменами её статуса.
 
  • Спасибо
Реакции: Philipp

Похожие темы

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)