Давайте сделаем так. Я постараюсь на днях (или раньше) снять ролик с парсингом большого файла. И заодно последим за производительностью внимательнее, включая диск.
Можно попробовать брать инфу отрезками. К примеру, можно создать очередь и брать по 1000 (просто число к примеру) элементов. Оптимальное количество можно узнать, хотя бы, простым подбором. Тогда будет баланс. Практический пример, не связанный с генераторами, но с похожим смыслом. Недавно я делал отправку уведомлений всем пользователям в БД. Ни единым запросом проводить INSERT не вариант (съест много оперативки), ни вставкой очереди по одному (будет много запросов). В итоге пришёл к тому, что по 1000 на одну операцию - это оптимальное количество.
@@dmitryalinsky5911 я не вижу чем тут отличается 1000 и 100000 и 10, т.к. судя по объяснению генератор хранит в памяти грубо говоря 1 запись и что бы прочитать другую запись её надо взять откуда-то, в данном случае из файла (диска)
Супер. Спасибо. Вывод: Генератор - это итератор, который позволяет проходить коллекцию не держа ее в памяти. Можно использовать для парсинга больших файлов, Http запросов, и других трудоемких операций, где нужно засунуть огромный объект в оперативку и затем пройтись по нему.
В том-то и дело, что засовывать в оперативку не обязательно. Если работа с файлом (или чем угодно поточным) - читаем его в потоке и обрабатываем построчно. Понимая, что однажды пройдя итерацию, обратно уже не вернёмся. Рад быть полезным! Удачи вам в применении на практике.
Большое спасибо что прислушались и раскрыли тему ! Все четко с толком и расстановкой. В коментах просят про реальный пример с бигдата, согласен это раскроет тему полностью. Будем ждать продолжение :)
Спасибо огромное, я понял генераторы! Очень не хватает иногда информации, которая объясняет суть вещей. Огромный респект за такую вдумчивую подачу знания
Хорошее видео, спасибо!!! но было бы прям СУПЕР, если был бы пример из жизни: "А сейчас мы с вами напишем небольшой парсер csv/excel файлов с помощью генератора"
Как жаль, что не знал о генераторах пару дней назад) Делал тестовое задание, где нужно было сделать отчет о нагрузке посекундно в течение суток. Решение с циклами работает, но занимает много памяти. А если понадобится сделать отчет за несколько дней, памяти не хватит.
Было познавательно и полезно Мне понравился пример на guzzle, вот только было не ясно зачем отправлять 100 одинаковых запросов без изменения отправляемых параметров, возможно я чего то не понимаю.
Если файл будет к примеру 1ГБ, не будет ли каждая итерация генератора обращаться к диску, тем замедляя работу?
Давайте сделаем так. Я постараюсь на днях (или раньше) снять ролик с парсингом большого файла. И заодно последим за производительностью внимательнее, включая диск.
@@freelancer_eyes Звучит потрясающе 👍
Можно попробовать брать инфу отрезками. К примеру, можно создать очередь и брать по 1000 (просто число к примеру) элементов. Оптимальное количество можно узнать, хотя бы, простым подбором. Тогда будет баланс.
Практический пример, не связанный с генераторами, но с похожим смыслом. Недавно я делал отправку уведомлений всем пользователям в БД. Ни единым запросом проводить INSERT не вариант (съест много оперативки), ни вставкой очереди по одному (будет много запросов). В итоге пришёл к тому, что по 1000 на одну операцию - это оптимальное количество.
@@dmitryalinsky5911 я не вижу чем тут отличается 1000 и 100000 и 10, т.к. судя по объяснению генератор хранит в памяти грубо говоря 1 запись и что бы прочитать другую запись её надо взять откуда-то, в данном случае из файла (диска)
@@stanislaukaraliou4679 Не обязательно одну. Можно с тем же успехом использовать $i += 1000 и yield range($i, $i + 999).
Спасибо, очень доходчиво и без лишней воды
Спасибо на добром слове! Рад, если помог разобраться в вопросе.
Спасибо за доступное объяснение.
Супер. Спасибо.
Вывод: Генератор - это итератор, который позволяет проходить коллекцию не держа ее в памяти. Можно использовать для парсинга больших файлов, Http запросов, и других трудоемких операций, где нужно засунуть огромный объект в оперативку и затем пройтись по нему.
В том-то и дело, что засовывать в оперативку не обязательно. Если работа с файлом (или чем угодно поточным) - читаем его в потоке и обрабатываем построчно. Понимая, что однажды пройдя итерацию, обратно уже не вернёмся.
Рад быть полезным! Удачи вам в применении на практике.
Огромное спасибо за ваш труд! Стало понятнее по работу генератора) Пожалуйста продолжайте делать такие видео)
Вам огромное спасибо за поддержку! От таких комментариев мотивация делать видео растёт как на дрожжах. :)
Супер-видео,много чего полезного для себя извлек!Спасибо
Спасибо за поддержку! Рад быть полезным.
Спасибо! Все понятно и доступно!
Большое спасибо что прислушались и раскрыли тему ! Все четко с толком и расстановкой. В коментах просят про реальный пример с бигдата, согласен это раскроет тему полностью. Будем ждать продолжение :)
Рад, что видео понравилось! Продолжение/дополнение обязательно сделаю. Сочиняю пример поинтереснее
Последний пример я всегда решал через очереди. Ну теперь ещё один инструмент добавился. Спасибо за такое доходчивое разъяснение!
Вам спасибо за поддержку! Рад быть полезным.
Спасибо огромное, я понял генераторы! Очень не хватает иногда информации, которая объясняет суть вещей. Огромный респект за такую вдумчивую подачу знания
Ура! Отлично! Я очень рад, что видео оказалось полезным.
Спасибо, что разжевали!:) Пойду оптимизировать проекты:))
Так им, проектам, и надо! От всей души желаю удачи. Будут вопросы по конкретике - welcome!
Круто, спасибо за объяснение!
Рад быть полезным!
Эх, если бы я 10 лет назад начал бы учиться по вашим видео, был бы уже миллионером))
Хорошее видео, спасибо!!! но было бы прям СУПЕР, если был бы пример из жизни: "А сейчас мы с вами напишем небольшой парсер csv/excel файлов с помощью генератора"
Поддерживаю!:)
Ну, что ж теперь делать. Будем записывать, значит :)
Генераторы, часть 2, практическая. Коротенько только, чтобы самую суть.
Как жаль, что не знал о генераторах пару дней назад) Делал тестовое задание, где нужно было сделать отчет о нагрузке посекундно в течение суток. Решение с циклами работает, но занимает много памяти. А если понадобится сделать отчет за несколько дней, памяти не хватит.
Эх, какая досада. Кабы раньше знать. Ну, не последнее ведь тестовое задание! В следующий раз будем оперативнее! :)
6ляяя, мужик спасибо. Я задолбался искать, нахрена нужны эти генераторы, когда я тоже самое могу с массивом сделать. Спасибо.
Было познавательно и полезно
Мне понравился пример на guzzle, вот только было не ясно зачем отправлять 100 одинаковых запросов без изменения отправляемых параметров, возможно я чего то не понимаю.
100 одинаковых конечно же не нужно. Но ведь никто не мешает в генератор передать нужный контекст или параметр, чтобы он yield то, что требуется
🔥🔥🔥🔥