Удаление/добавление данных с ресурса вручную. Не по Success или Fail



  • Судя с разъяснение http://community.bablosoft.com/topic/46/возврат-данных-в-файл-при-ошибке-скрипта/4 строка с ресурса удаляется, только когда скрипт успешно завершил свою работу или же достигнут указанный предел ошибочных использований.

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

    Подробнее:
    Есть ресурс txt файл название email.
    Идет авторизация на сайте, дальше идет цикл проверки строк из ресурса email. Так вот получается цикл внутри потока с использованием данных с ресурса email. И на каждой итерации, при определенном условии, мне нужно удалять только что взятый email из файла (ресурса) да еще и так, чтобы другие потоки, поняли это.
    По сути нужен вызов функции, которая вызывается, когда поток успешно завершается и строка с ресурса удаляется.
    Есть идеи , как сделать ?


  • administrators

    Удалить ресурс вручную можно выполнив код,

    RS("Название ресурса",false,false)!
    _result().die()
    _R["Название ресурса"] = null

    Остальные потоки перестанут его использовать.
    В дальнейшем сделаю для работы с ресурсами отдельный модуль. Пока так



  • @support хотел бы уточнить, это удалит текущую строку из ресурса (ту что на данный момент использую) и дальше я смогу брать опять строку(следующую) с ресурса ?


  • administrators

    Немного подправил код. В таком виде можно



  • на данный момент проще просить, чем самому проверять:
    использую код выше, для удаления строки с ресурса. Оно удаляет с копии (которая находится в оперативной памяти). Вопрос: а когда они удалятся из файла на жестком диске? Скорее всего при успешном завершении скрипта. А вот если скрипт Fail сработал, строки удаляются с файла или нет? (мне нужно, чтобы удалялись).

    зы: возможно, мне вообще для этого случая не стоило использовать ресурс, а делать через обычную реалтайм запись/удаление строк из файла. Я так понимаю, разные потоки будут лочить обращение к файлу, как и полагается.



  • каким кодом можно добавить строки в ресурс(не только в копию в оперативной памяти, но и в физический файл., чтобы они вдруг если что не потерялись), так, чтобы это заметили и другие потоки, могли использовать эти данные, когда до низ дойдет очередь ?

    Просто задача такого плана сейчас:
    при определенном условии, нужно взять и добавить 10 строк назад в ресурс. Перед этим мы их удаляли (код выше). Но вот наступила определенная ситуация, и нужно эти данные(10 строк, которые, после взятия из ресурса сохраняются во временный массив(на случай, когда их придется вернуть в ресурс)) вернуть.


  • administrators

    @out said:

    использую код выше, для удаления строки с ресурса. Оно удаляет с копии (которая находится в оперативной памяти). Вопрос: а когда они удалятся из файла на жестком диске? Скорее всего при успешном завершении скрипта. А вот если скрипт Fail сработал, строки удаляются с файла или нет? (мне нужно, чтобы удалялись).

    либо по завершении скрипта, либо через некоторое время.

    зы: возможно, мне вообще для этого случая не стоило использовать ресурс, а делать через обычную реалтайм запись/удаление строк из файла. Я так понимаю, разные потоки будут лочить обращение к файлу, как и полагается.

    Да будут, как вариант.


  • administrators

    @out said:

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

    Просто задача такого плана сейчас:
    при определенном условии, нужно взять и добавить 10 строк назад в ресурс. Перед этим мы их удаляли (код выше). Но вот наступила определенная ситуация, и нужно эти данные(10 строк, которые, после взятия из ресурса сохраняются во временный массив(на случай, когда их придется вернуть в ресурс)) вернуть.

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



  • @support said:

    @out said:

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

    Просто задача такого плана сейчас:
    при определенном условии, нужно взять и добавить 10 строк назад в ресурс. Перед этим мы их удаляли (код выше). Но вот наступила определенная ситуация, и нужно эти данные(10 строк, которые, после взятия из ресурса сохраняются во временный массив(на случай, когда их придется вернуть в ресурс)) вернуть.

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

    попробую сперва заменить работу с ресурсом на

    зы: возможно, мне вообще для этого случая не стоило использовать ресурс, а делать через обычную реалтайм запись/удаление строк из файла. Я так понимаю, разные потоки будут лочить обращение к файлу, как и полагается.

    если будет нормально в многопотоке, то в принципе и вопрос решен.


  • administrators

    Все действия в БАС являются потокобезопасными, исключение составляют асинхронные модули, написанные на с++, которые используют общие ресурсы, и в которых создатели модулей не позаботились о синхронизации.

    Что касается добавления в ресурс, то если есть необходимость, могу реализовать в течении 1-2 дней.



  • ну текущую задачу я как-то может решу без ресурса, а напрямую работая с файлом. А вообще , на будущее такой функционал конечно же нужен: добавление строки в конец/начало ресурса, тоже самое и с получением строки.. На мой взгляд нужно чучуть добавить гибкости/возможности взаимодействовать с ресурсами уже в процессе работы внутри скрипта.

    UP: пытался решить этот момент, получился замкнутый круг..
    Удаляю строку с ресурса кодом выше, но с файла она не удаляется. Удаляется только тогда , когда стоит галка на ресурсе "Удалять строки".
    Но если я ее ставлю, то тогда строки уже автоматом удаляются с ресурса, сразу после взятия их с галкой notreuse ({{inps_profile_pars|notreuse}}).
    такой вот затык(
    А нужно мне всего лишь было: брать строку из файла, после взятия чтобы она сразу не удалялась, а удалялась только после использования кода
    RS("Название ресурса",false,false)!
    _result().die()
    _R["Название ресурса"] = null

    Короче говоря, нужна обычная работа с файлами (списками). Указали путь к файлу, указали что это список, дальше берем и работаем построчно с этим списком, взять строку, с удалением, без. Синхронизировать с локальным файлом или нет. и т.д.
    Т.к. с ресурсами не удается работать гибко внутри одного потока.


  • administrators

    @out said:

    Но если я ее ставлю, то тогда строки уже автоматом удаляются с ресурса, сразу после взятия их с галкой notreuse

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

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

    В БАС строки удаляются автоматически при наступлении допустимого количества неудач или успехов. Если нужно самостоятельно удалять строки, можно сделать таким образом - поставить галку удалять строки, выставить количество неудач и успехов в 10000, а при необходимости удалить строку вызывать код выше.


  • administrators

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

    0_1466367470707_ResourceModule.png

    0_1466367581194_RuAddElemetInterface.png

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

    http://wiki.bablosoft.com/doku.php?id=ru:how_to_let_user_to_choose_output_file_name

    Скачать новую версию можно тут
    https://bablosoft.com/distr/BrowserAutomationStudioDevelopment/11.4.0/BrowserAutomationStudioInstallAllInOne.exe



  • спасибо. такими темпами скоро можно будет выходить на конкурентов на платной основе )
    предлагаю переименовать "добавить в базу\файл мгновенно" на "добавить мгновенно"
    "только добавить в базу\файл" на "только добавить"

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


Log in to reply
 

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