Возможно ли добавить lock ресурса?


  • administrators

    @lev Так и происходит по умолчанию. Если какой-то поток использует ресурс - скрипт не завершиться, пока поток не отпустит этот ресурс.

    Если не прерывать скрипт, а просто брать ресурс, который уже пустой, то поток прерывается, но прерывает и все остальные, которые могли успешно завершить работу

    Так будет только если удалять преждевременно, попробуйте не удалять ресурс и будет работать так, как вы хотите.
    Если хотите удалить строки из файла, после того, как ресурсы были использованы - используйте чекбокс "Запись" при создании ресурса.

    Вот проект, который решает вашу задачу:

    lock2.xml



  • @support ок, спасибо, я кажется понял. Т.е. если у меня 3 ресурса есть, то с 2 я могу работать в ручном режиме (т.е. удалять из базы мгновенно), но с одним, для нормальной работы в многопотоке - в автоматическом режиме надо работать (notreuse и возможность записи в файл), вроде так



  • @support Еще, было б круто, если б у экшена "Прервать сркипт" была такая опцию, что б он работал также, как и при попытке взять ресурс из пустого списка. Сейчас же "Прервать скрипт" - все прерывает, даже если ресурсы залочены и в работе. Ну понятно, что эта функция не мега важная, но в будущем может)



  • @lev а нет, я неправильно подумал, все ресурсы нужно использовать в автоматическом режиме, иначе, если использовать ресурс в ручном режиме и он закончится, то он прервет скрипт, и не обратит внимания ни на что. Блин, это плохо тем, что если я беру по 5 строк из ресурса, а у меня в нем 43 строки, то 40 строк возьмется, а последние три строки не возьмутся, т.к. поток попытается 5 штку взять, у него не получится и он прервется ....



  • @support можно было б проверять по количеству строк в ресурсе (если остается строк в ресурсе меньше 5, то брать все строки), но в автоматическом режиме одна строка лочится и удаляется после завершения потока, и так не проверишь


  • administrators

    @lev

    Т.е. если у меня 3 ресурса есть, то с 2 я могу работать в ручном режиме (т.е. удалять из базы мгновенно), но с одним, для нормальной работы в многопотоке - в автоматическом режиме надо работать (notreuse и возможность записи в файл), вроде так

    Да, но удалять вручную не обязательно, лучше пусть БАС сделает это автоматом.

    Еще, было б круто, если б у экшена "Прервать сркипт" была такая опцию, что б он работал также, как и при попытке взять ресурс из пустого списка.

    Он так и работает. Еще есть действие Fail, которое прерывает поток, но не прерывает скрипт.

    Сейчас же "Прервать скрипт" - все прерывает, даже если ресурсы залочены и в работе. Ну понятно, что эта функция не мега важная, но в будущем может)

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

    Блин, это плохо тем, что если я беру по 5 строк из ресурса, а у меня в нем 43 строки, то 40 строк возьмется, а последние три строки не возьмутся, т.к. поток попытается 5 штку взять, у него не получится и он прервется ....

    Попробуйте установить флаг "Не прерывать приложение" и обернуть в действие "Игнорировать ошибки" если хотите, чтобы приложение не прерывалось, если ресурс закончился.

    0_1473330496566_DontBreakApp.png



  • @support said in Возможно ли добавить lock ресурса?:

    Да, но удалять вручную не обязательно, лучше пусть БАС сделает это автоматом.

    Я тестировал. И получается такая ситуация. Есть 2 ресурса. С одним я решил работать в автоматическом режиме, с другим - в ручном. Если в первом заканчиваются ресурсы, то он ждет, когда остальные потоки доработают, если в ручном заканчиваются ресурсы, то он сразу все прерывает и не обращает внимание, что у других потоков есть ресурсы в локе. Видимо он смотрит только за своими ресурсами. В первом случае он видит, ага, у меня есть в списке ресурсы залоченные, подожду .... Во втором случае он смотрит на свои ресурсы и видит, что список пустой, в нем нет залоченных ресурсов, а то что в соседнем ресурсе есть залоченные строки, он не обращает внимания. У меня был проект, но могу еще раз сделать, если не верите

    Он так и работает. Еще есть действие Fail, которое прерывает поток, но не прерывает скрипт.

    "Прервать скрипт" не обращает внимание на то, залочены какие-либо ресурсы у потока или нет, ща проект накидаю...

    Попробуйте установить флаг "Не прерывать приложение" и обернуть в действие "Игнорировать ошибки" если хотите, чтобы приложение не прерывалось, если ресурс закончился.

    Но тогда он будет, я так понимаю, работать, пока не достигнет количества успехов установленного, но у меня их 10000, например, все потоки в пустую будут запускаться.


    Вы можете помочь решить такой пример.
    Есть ресурс, в нем 12 строк (пусть цифры от 1 до 12)
    Скрипт запускается в 5 потоков
    Количество успехов - 100000
    Количество неудач - 100000

    Необходимо, чтобы поток брал по 5 строк с удалением из файла ресурса.
    Далее писал в лог - взяты строки [перечислены эти пять строк]
    Переходил на яндекс ру
    И писал в лог "Загрузили яндекс"

    И чтобы он успешно взял последние 3 строчки
    Это бы все очень прояснило. Заранее спасибо, а то я уже никак не могу ничего понять.


  • administrators

    @lev

    Вы можете помочь решить такой пример.

    Да, пожалуйста.

    lock3.xml


  • administrators

    @lev Не стал отвечать на вопросы, по скрипту должно быть понятно. Хотя согласен, что это не очень удобно. Возможно добавлю действие, которое будет брать пачку строк.



  • @support Спасибо за пример. Да, было б круто, если б появился такой экшн. А то очень много писанины для такой простой операции. Проще бы было, если б был экшн "Прервать скрипт", но который не прерывал бы уже запущенные потоки. Тогда можно было б в ручную проверять количество строк в ресурсе через "ресурс в список", и мгновенно удалять строку ресурса, если ресурс не пустой. Больше было б возможности. Еще раз спасибо, а то я со вчерашнего вечера сижу-думаю)))


  • administrators

    @lev Тогда лучше сделать параметр для всего скрипта, который ждет окончания каждого потока. Потому что "Прервать скрипт" юзают мало



  • @support Всмысле? Ну это то, о чем я и говорил, типа не прервать скрипт, а прервать скрипт, и ждать, когда запущенные потоки закончат работу?. Если да, то вы сделаете к следующему обновлению?) А то я тогда подожду лучше)


  • administrators

    @lev

    Всмысле? Ну это то, о чем я и говорил, типа не прервать скрипт, а прервать скрипт, и ждать, когда запущенные потоки закончат работу?

    Да.

    Если да, то вы сделаете к следующему обновлению?) А то я тогда подожду лучше)

    Скорее всего не успею


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.