Как писать лог не сразу, а после определенного количества отработаных потоков?
-
Мне нужно писать свой лог. Сейчас лог пишется в текстовый файл в конце каждого отработанного потока. Таким образом, отработало 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 запросах, и только в конце открываю браузер, гружу урл и двигаю там мышкой. Можно ли как-то сделать так чтоб браузер открыть чисто перед загрузкой урла и сразу же закрыть после того как подвигали мышкой?
Я так понял что браузер автоматически запускается при старте потока? не зависимо от того гружу ли я что-то в нем?
Просто у меня на старте идет чек проксей и часто поток отваливается если в чем-то трабла, а браузер только в конце. И выходит была бы существенная оптимизация, если бы браузер не запускался на старте потока.
Поправьте если не прав.
-
А может есть вариант оптимизации работы с браузером? У меня шаблон на старте работает на get запросах, и только в конце открываю браузер, гружу урл и двигаю там мышкой. Можно ли как-то сделать так чтоб браузер открыть чисто перед загрузкой урла и сразу же закрыть после того как подвигали мышкой?
Да, действия "Открыть браузер" и "Закрыть браузер"
-
@support said in Как писать лог не сразу, а после определенного количества отработаных потоков?:
А может есть вариант оптимизации работы с браузером? У меня шаблон на старте работает на 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
-
@Gang said in Как писать лог не сразу, а после определенного количества отработаных потоков?:
А когда юзаем действия открыть/закрыть браузер, шаблон видит эту конструкцию и вначале шаблоне не будет открывать браузер? А только в том месте где мы задали, верно?
Да.
То есть я правильно предположил что браузер всегда запускается в начале потока даже если мы с ним не делаем ни какие действия?
Если браузер используется(скрипт не на хттп клиенте) и нет действий "Открыть браузер" или "Закрыть браузер", то да.
И еще скажите, открытие и закрытие браузера данными действиями больше жрет ресурсов чем когда браузер по умолчанию открывается в начале потока и в конце перезагружается процесс?
Нет, ресурсов тратится столько же.
Если я в конце перед загрузкой урла поставлю открыть браузер, а после движения мышки закрыть браузер, это оптимизирует нагрузку?
Да.
-
Сделал как описал выше. Скрин ошибок прилагаю
Вы использовали "Открыть браузер" после того, как попытались с ним работать. Наличие браузера требуют не только непосредственно загрузка урл, но и установка прокси, хедеров и прочее.