Благодарю!
разобрался)
сделать так чтобы на ОДИН и тот же кубик не набросилось одновремененно несколько потоков ?
-
Вообщем поток не устанавливает прокси пока не обнулится некая глоб переменная, которая 1 пока какой либо из потоков в процессе установки прокси. Как поток установил прокси - обнуляется глобальная переменная и установка прокси доступна другому потоку.
Кто первый того и тапки.Как справиться с проблемой что поток завис, вывалился или просто прокси сломалась надолго и из за этого глоб переменная не обнуляется? стопорит очередь
у меня такая мысль - мониторить время, если поток больше 90сек лагает, его выкидывать наверх и обнулять глобальную, давая тем самым возможность любому другому потоку работать. а ? -
А почему так сложно? Я просто загоняю прокси в ресурс, и оттуда беру по одной прокси когда надо, в свойствах ресурса ставишь что использовать его можно только один раз, это значит что только один поток за раз сможет брать этот прокси. И далее твоя сотня прокси будут крутится по кругу.
-
@kuzkuz Так а в чем принципиальная проблема не использовать ту схему которую я озвучил выше? Из ресурса берется прокся, если она взята одним потоком другой ее взять не может, (потому что так прописано в свойствах ресура) после того как она перестает работать берется другая прокся, а первая освобождается для других потоков. Если же поток выполнил работу и перезапускается, прокся так же освобождается и опять доступна всем потокам.
Просто в свойствах ресурса надо поставить:
Успешных использований - (тут пишем какую-то большую цифру)
Ошибочных использований - (тут пишем так же большую цифру)
Количество одновременных использований - тут должна стоять 1 (это значит что только один поток будет использовать одну строчку из ресурса в один момент времени).Дальше если все прокси задаются в ресурсе на старте, то ставь галочку только на чтение, если со временем туда будут добавятся новые прокси, ставь галочку еще и на запись, но тогда надо будет заморачиваться с внесением прокси после использование опять в ресурс.
-
парни. пусть это будет не прокси.
пусть это будет кубик добавления в базу.
теперь перечитываем первый пост такВообщем поток не добавляет строки/группы строк в базу пока не обнулится некая глоб переменная, которая 1 пока какой либо из потоков в процессе добавления строки/группы строк в базу. Как поток записал строку в базу - обнуляется глобальная переменная и добавление строки/группы строк доступно другому потоку.может так поймете что задача - сделать так чтобы на ОДИН и тот же кубик не набросилось одноврмененно несколько потоков. Все работает круто, КРОМЕ того что может поток выпадать и тогда глоб переменная не обнуляется и резервирование не освобождается. Как решить пробелму?
странно что с первого поста это не понятно. я же очевидно все описал. видимо "прокси" сбивает с толку -
Да мы то всё поняли.
Проблема с вылетанием потоков - это один вопрос.
Использование глобальной переменной для чека потоками - это второй вопрос, на который тоже ответы могут быть разные в зависимости от задачи и скрипта.
Логика скрипта какая - тоже важно. Разный алгоритм - разные траблы... и это уже третье.
База не база - это вообще уже другое. Я вот файловую систему предпочитаю использовать, и никаких проблем не вижу в этом. Благо ситуация позволяет.Мы вот в душе не чаем что там у тебя нафигачено, а ты пытаешься нам доказать, что мы неправильно что-то думаем.
Каждый энтузиаст бы с удовольствием помог разобраться, если бы понятно было что как устроено.
Вот хотя бы что там у тебя вылетают потоки?
У меня ничего не вылетает и мне сложно понять. -
@IvanM Использование глобальной переменной для чека потоками - это второй вопрос, на который тоже ответы могут быть разные в зависимости от задачи и скрипта.
Задача: потоков от 1 до 100. Кубик №45362373, там код который выполняется 2-10 сек. Нужно сделать одномоментно доступ к нему только одному потоку. Как только поток отработал кубик №45362373 - кубик становится доступен любому следующему потоку.
Тебе спасибо, что подключаешься и хочешь помочь, но вы усложнили.
-
@kuzkuz Тогда ты сам ответил на свой вопрос, ставишь условие, если поток не отработал за какое-то определенное время, обнуляй глобальную переменную и перезапускай поток. Если по ошибке валится, найди где валится и ставь условие если произошла ошибка обнуляй глобальную переменную и перезапускай поток.
-
Еще через асинхроннку можно. Чтобы поток перебирал потоки: спрашивал, занят ли поток-исполнитель и давал ему задачу и прокси. Ну и чтобы руководящий поток ждал ответа - успех не успех. И в соответствии с этим дальше поступал.
Ну и чтобы рандомно выбирал из числа потоков-исполнителей к кому обратиться, если это важно.