Функциональный PHP: Многопоточный парсер
Второй мастер-класс по функциональному программированию в PHP на примере написания многопоточного парсера активных участников форума. Рассмотрели базовую реализацию многопоточности в PHP и отличия от других языков программирования:
Открыть на YouTube | Исходники примера | Вебинар о подсчёте стоимости
Приглашаю на следующие видеоуроки. Анонс и ссылку на эфир, как обычно, пришлю в отдельной рассылке по вебинарам:
И задавайте вопросы в комментариях. Заранее спасибо и до встречи в эфире!
Спасибо, очень интересный инфа
PHP-борода+усы снова в эфире! Я удивляюсь терпению Дмитрия записать видео на 205 минут! Это 3 часа 25 минут рассказывать про написание парсера!!!
Снимаю шляпу!
Серьезно!
у вас мощная воля, респект вам!
На всякий случай - длина файла - filesize($childPid . '.txt')
Хороший материал, только автор смешивает или путает два понятия процессы и потоки. Да fork порождает новый процесс, а не поток, а следовательно парсер мультипроцессный, а не мультипоточный. Мультипоточность тоже есть (создание новых потоков они же threads ) через pthreads https://github.com/krakjoe/pthreads только нужна thread-safe сборка php.
В комментариях на YouTube про это уже говорили.
Дмитрий, спасибо! Ваши уроки замечательные, но видео больше 3 часов - это очень долго. Возможно, стоит подумать как можно сократить, оставив самое интересное. Например, в этом видео для меня было интересно работа с процессами, подключение краулера, подход к конфигурированию функций. А тонкости реализации самого парсера, которые занимают примерно половину времени не очень.
Добро утро, Дмитрий.
Тема старая, но надеюсь на Ваш ответ.
Пытаюсь повторить, то, о чём Вы тут рассказали.
Но при использовании parallel_map() у меня вываливаются ошибки
и
Это происходит, если директория с кэшем пустая. Приходится несколько раз запускать скрипт, пока не создадутся все файлы страниц в кэше.
Как только заполнится - ошибка уходи и всё работает как положено.
Единственно, что я понял из поиска решения, это то, что происходит зацикливание на сервере, но как это решить - не пойму.
Если заменить parallel_map() на обычный array_map() скрипт работает без ошибок вне зависимости, есть файлы в кэше или нет.
Доброй ночи.
Понял свою ошибку, теперь работает без ошибки.
Ошибка была в том, что я пытался обработать массив из 140 ссылок, чтобы получить ссылки на все страницы товаров с учётом пагинации. В итоговом массиве получилось 250 ссылок. Сервер не выдерживал, то о чём Вы, Дмитрий, говорили.
Благодарю за это видео.
Дмитрий, добрый день!
Подскажите, как парсер из видео справится с задачей в несколько миллионов спарсенных страниц?
Спасибо
За долгое время справится.