Как писать лог не сразу, а после определенного количества отработаных потоков?



  • Мне нужно писать свой лог. Сейчас лог пишется в текстовый файл в конце каждого отработанного потока. Таким образом, отработало 100 потоков по одному разу, тогда БАС обратится к текстовым файлам на запись 100 раз. Я хочу оптимизировать этот момент и писать логи с определенной периодичностью.

    Например отработало 100 потоков, и только тогда пишу одним махом в текстовый файл все логи по данным потокам.

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

    Разъясните этот момент пожалуйста. Как это сделать? Может у кого есть готовое решение?



  • @Gang Запись в файл намного менее затратная операция чем удаление строк.
    Ну и БАС он достаточно оптимизирован.
    Во первых, файл открывается только при запуске скрипта, а не при записи каждой строки в лог.
    БАС передает строку на запись в файл, а ОС сама решает писать ее или сохранить в буфер, но каждые 100 строк значение буфера принудительно скидывается в файл:
    https://github.com/bablosoft/BAS/blob/master/Engine/filelogger.cpp#L57-L61

    Так что можете писать в лог не беспокоясь о производительности.



  • @support said in Как писать лог не сразу, а после определенного количества отработаных потоков?:

    Запись в файл намного менее затратная операция чем удаление строк.

    Я вродь про удаления строк ничего не говорил. Что имеете ввиду?



  • @Gang Я как пример привел, записать одну строку намного, намного быстрее чем 1 строку удалить.
    Я делал грабер который в 100+ потоков парсил и писал по 50 строк в лог с одной страницы. Проблем с производительностью не было.
    Если у вас юудут, я могу сделать на уровне БАС кеш, но кеша на уровне ОС должно хватить.



  • @support said in Как писать лог не сразу, а после определенного количества отработаных потоков?:

    @Gang Я как пример привел, записать одну строку намного, намного быстрее чем 1 строку удалить.
    Я делал грабер который в 100+ потоков парсил и писал по 50 строк в лог с одной страницы. Проблем с производительностью не было.
    Если у вас юудут, я могу сделать на уровне БАС кеш, но кеша на уровне ОС должно хватить.

    Спасибо! Просто у меня БАС упирается в железо сильно) Я думаю где еще можно оптимизировать нагрузку, вот и докопался к логам)



  • @Gang Основная нагрузка это браузер, все потоки, чтение и запись в файл по сравнению с браузером незначительны.



  • @support said in Как писать лог не сразу, а после определенного количества отработаных потоков?:

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

    А может есть вариант оптимизации работы с браузером? У меня шаблон на старте работает на get запросах, и только в конце открываю браузер, гружу урл и двигаю там мышкой. Можно ли как-то сделать так чтоб браузер открыть чисто перед загрузкой урла и сразу же закрыть после того как подвигали мышкой?

    Я так понял что браузер автоматически запускается при старте потока? не зависимо от того гружу ли я что-то в нем?

    Просто у меня на старте идет чек проксей и часто поток отваливается если в чем-то трабла, а браузер только в конце. И выходит была бы существенная оптимизация, если бы браузер не запускался на старте потока.

    Поправьте если не прав.



  • @Gang

    А может есть вариант оптимизации работы с браузером? У меня шаблон на старте работает на get запросах, и только в конце открываю браузер, гружу урл и двигаю там мышкой. Можно ли как-то сделать так чтоб браузер открыть чисто перед загрузкой урла и сразу же закрыть после того как подвигали мышкой?

    Да, действия "Открыть браузер" и "Закрыть браузер"



  • @support said in Как писать лог не сразу, а после определенного количества отработаных потоков?:

    @Gang

    А может есть вариант оптимизации работы с браузером? У меня шаблон на старте работает на get запросах, и только в конце открываю браузер, гружу урл и двигаю там мышкой. Можно ли как-то сделать так чтоб браузер открыть чисто перед загрузкой урла и сразу же закрыть после того как подвигали мышкой?

    Да, действия "Открыть браузер" и "Закрыть браузер"

    Да эти действия я видел. Но меня смущает тот момент, что браузер открывается автоматически сразу при запуске потока. Как его отключить на старте? Он там не нужен. Или я не прав? Я просто сужу по Зеннопостеру, там так реализовано, типа работаешь ты с браузером или нет, браузер все равно будет на потоке висеть. Можно его или полностью отключить, или включить. А точечно где нужно открыл, где нужно закрыл, такого нет.

    Уточните как у вас этот момент работает?



  • @Gang Если скрипт использует действие Открыть браузер или Закрыть браузер, это означает, что пользователь сам временем жизни браузера. Он будет создан только при первом вызове Открыть браузер и будет существовать до вызова Закрыть браузер.

    Например,

    Делаем что-то с хттп клиентом
    Открыть браузер
    Загрузить cookies из http клиента
    Работа с браузером
    Закрыть браузер
    Продолжаем работу с хттп клиентом
    

    В этом примере браузер будет существовать только между Открыть браузер и Закрыть браузер



  • @support said in Как писать лог не сразу, а после определенного количества отработаных потоков?:

    @Gang Если скрипт использует действие Открыть браузер или Закрыть браузер, это означает, что пользователь сам временем жизни браузера. Он будет создан только при первом вызове Открыть браузер и будет существовать до вызова Закрыть браузер.

    Например,

    Делаем что-то с хттп клиентом
    Открыть браузер
    Загрузить cookies из http клиента
    Работа с браузером
    Закрыть браузер
    Продолжаем работу с хттп клиентом
    

    В этом примере браузер будет существовать только между Открыть браузер и Закрыть браузер

    Спасибо! То есть я правильно предположил что браузер всегда запускается в начале потока даже если мы с ним не делаем ни какие действия?

    А когда юзаем действия открыть/закрыть браузер, шаблон видит эту конструкцию и вначале шаблоне не будет открывать браузер? А только в том месте где мы задали, верно?

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

    Очень нужно оптимизировать работу с браузером, много ресурсов сейчас жрет. Вначале половина шаблона построена на http запросах и только в конце 1 раз прогружаем в браузере урл и двигаем мышкой.

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



  • Сделал как описал выше. Скрин ошибок прилагаю
    http://i.piccy.info/i9/3e078859b2c34a9652ef90ea5823b9f4/1490094195/30368/1119390/21_03_2017_11_43_41.png
    alt text



  • @Gang said in Как писать лог не сразу, а после определенного количества отработаных потоков?:

    А когда юзаем действия открыть/закрыть браузер, шаблон видит эту конструкцию и вначале шаблоне не будет открывать браузер? А только в том месте где мы задали, верно?

    Да.

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

    Если браузер используется(скрипт не на хттп клиенте) и нет действий "Открыть браузер" или "Закрыть браузер", то да.

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

    Нет, ресурсов тратится столько же.

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

    Да.



  • @Gang

    Сделал как описал выше. Скрин ошибок прилагаю

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


Log in to reply