сделать так чтобы на ОДИН и тот же кубик не набросилось одновремененно несколько потоков ?



  • Вообщем поток не устанавливает прокси пока не обнулится некая глоб переменная, которая 1 пока какой либо из потоков в процессе установки прокси. Как поток установил прокси - обнуляется глобальная переменная и установка прокси доступна другому потоку.
    Кто первый того и тапки.

    Как справиться с проблемой что поток завис, вывалился или просто прокси сломалась надолго и из за этого глоб переменная не обнуляется? стопорит очередь
    у меня такая мысль - мониторить время, если поток больше 90сек лагает, его выкидывать наверх и обнулять глобальную, давая тем самым возможность любому другому потоку работать. а ?



  • А почему так сложно? Я просто загоняю прокси в ресурс, и оттуда беру по одной прокси когда надо, в свойствах ресурса ставишь что использовать его можно только один раз, это значит что только один поток за раз сможет брать этот прокси. И далее твоя сотня прокси будут крутится по кругу.



  • @Samael_96 прочитайте задачу.
    Прокси может быть и одна.
    Задача не дать одномоментно 100 потокам использовать один и тот же кубик, но при этом и не дать застрять



  • @kuzkuz Так а в чем принципиальная проблема не использовать ту схему которую я озвучил выше? Из ресурса берется прокся, если она взята одним потоком другой ее взять не может, (потому что так прописано в свойствах ресура) после того как она перестает работать берется другая прокся, а первая освобождается для других потоков. Если же поток выполнил работу и перезапускается, прокся так же освобождается и опять доступна всем потокам.
    Просто в свойствах ресурса надо поставить:
    Успешных использований - (тут пишем какую-то большую цифру)
    Ошибочных использований - (тут пишем так же большую цифру)
    Количество одновременных использований - тут должна стоять 1 (это значит что только один поток будет использовать одну строчку из ресурса в один момент времени).

    Дальше если все прокси задаются в ресурсе на старте, то ставь галочку только на чтение, если со временем туда будут добавятся новые прокси, ставь галочку еще и на запись, но тогда надо будет заморачиваться с внесением прокси после использование опять в ресурс.



  • Не очень понятно что ты придумал. Не очень понятно, зачем так сложно придумывать.
    Я бы давал по одному прокси из базы в глобальную переменную, через заданный промежуток времени. А потоки бы расхватывали и обнуляли эту переменную.



  • парни. пусть это будет не прокси.
    пусть это будет кубик добавления в базу.
    теперь перечитываем первый пост так

    Вообщем поток не добавляет строки/группы строк в базу пока не обнулится некая глоб переменная, которая 1 пока какой либо из потоков в процессе добавления строки/группы строк в базу. 
    Как поток записал строку в базу - обнуляется глобальная переменная и добавление строки/группы строк доступно другому потоку.
    

    может так поймете что задача - сделать так чтобы на ОДИН и тот же кубик не набросилось одноврмененно несколько потоков. Все работает круто, КРОМЕ того что может поток выпадать и тогда глоб переменная не обнуляется и резервирование не освобождается. Как решить пробелму?
    странно что с первого поста это не понятно. я же очевидно все описал. видимо "прокси" сбивает с толку



  • заголовок темы поправил.
    Все же да, основная задача "сделать так чтобы на ОДИН и тот же кубик не набросилось одноврмененно несколько потоков. " И при этом не забронировал его навсегда.



  • Да мы то всё поняли.
    Проблема с вылетанием потоков - это один вопрос.
    Использование глобальной переменной для чека потоками - это второй вопрос, на который тоже ответы могут быть разные в зависимости от задачи и скрипта.
    Логика скрипта какая - тоже важно. Разный алгоритм - разные траблы... и это уже третье.
    База не база - это вообще уже другое. Я вот файловую систему предпочитаю использовать, и никаких проблем не вижу в этом. Благо ситуация позволяет.

    Мы вот в душе не чаем что там у тебя нафигачено, а ты пытаешься нам доказать, что мы неправильно что-то думаем.

    Каждый энтузиаст бы с удовольствием помог разобраться, если бы понятно было что как устроено.

    Вот хотя бы что там у тебя вылетают потоки?
    У меня ничего не вылетает и мне сложно понять.



  • @IvanM Использование глобальной переменной для чека потоками - это второй вопрос, на который тоже ответы могут быть разные в зависимости от задачи и скрипта.

    Задача: потоков от 1 до 100. Кубик №45362373, там код который выполняется 2-10 сек. Нужно сделать одномоментно доступ к нему только одному потоку. Как только поток отработал кубик №45362373 - кубик становится доступен любому следующему потоку.

    Тебе спасибо, что подключаешься и хочешь помочь, но вы усложнили.



  • @kuzkuz Тогда ты сам ответил на свой вопрос, ставишь условие, если поток не отработал за какое-то определенное время, обнуляй глобальную переменную и перезапускай поток. Если по ошибке валится, найди где валится и ставь условие если произошла ошибка обнуляй глобальную переменную и перезапускай поток.



  • Еще через асинхроннку можно. Чтобы поток перебирал потоки: спрашивал, занят ли поток-исполнитель и давал ему задачу и прокси. Ну и чтобы руководящий поток ждал ответа - успех не успех. И в соответствии с этим дальше поступал.
    Ну и чтобы рандомно выбирал из числа потоков-исполнителей к кому обратиться, если это важно.


Log in to reply