Форум сайта python.su
Ребят, всем привет. Есть такой вот вопрос.
Что лучше подойдет для решения следующей задачи?
Есть у меня парсер поисковой выдачи. Парсить может, скажем из гугла и яху, в стандартном режиме все работает последовательно, сначала парсится гугл, потом яху, и все это пишется в один файл. Мне необходимо следующие, Что бы при запуске скрипта, одновременно парсился и гугл и яху, и все это писалось в отдельный файл для каждого скрипта.
Для наглядности, представьте, как в одной консоли вы запускаете главный скрипт, затем открывается еще две консоли для гугла и яху и каждый из них работает параллельно с другим. Как реализовать подобное?
Подойдут ли такие средства как subprocess и multiprocessing?
Или есть еще варианты?
Офлайн
Mr.Anderson
писалось в отдельный файл для каждого скрипта.
Mr.AndersonПодойдут. только либо то либо другое.
Подойдут ли такие средства как subprocess и multiprocessing?
Mr.AndersonВариантов огромное число. Но их есть смысл рассматривать когда будут проблемы, например с агрегированием результатов или нехваткой оперативки и т.п.
Или есть еще варианты?
Офлайн
doza_andПросто в результате ожидается, что будет большой объем данных. Примерно 4 парсера должны будут парсить 4 поисковика, и счет сайтов будет в тысячном эквиваленте.
Офлайн
Mr.Anderson
Я бы использовал aiohttp для скачивания данных, а потом по мере их готовности их парсил с помощью lxml.
Сам парсер (lxml) надо только вынести или в поток или в отдельный процесс.
Да, собственно говоря в одном проекте своем я так и сделал, все работает довольно быстро.
Отредактировано alex925 (Июль 17, 2016 17:11:13)
Офлайн
У меня уже есть готовые парсеры, мне лишь нужно решить задачу.
Что бы при запуске скрипта, назовем его main.py у меня открывались сразу 2 новых консоли(работаю в линкусе), и в каждой из них работал свой парсер. И что бы я видел весь этот процесс.
Такой вариант не подходит, нет новых окон консоли и скрипты запускаются поочередно, а не одновременно.
import subprocess subprocess.call(["python", "myscript.py"]) subprocess.call(["python", "myscript2.py"])
Офлайн
Что-то вроде этого:
import subprocess proc1 = subprocess.Popen(['konsole', '-e', 'python', 'myscript.py']) proc2 = subprocess.Popen(['konsole', '-e', 'python', 'myscript2.py'])
Отредактировано scidam (Июль 18, 2016 05:47:38)
Офлайн
Mr.AndersonТогда я бы использовал multiprocessing, в этом случае можно организовать обмен информацией между процессами (причем различными способами, какой душе угодно можно использовать) и организовать обработку как захочешь.
У меня уже есть готовые парсеры, мне лишь нужно решить задачу.
Офлайн
alex925Тут дело не в ускорении. В его прямом понимании. Я не пытаюсь ускорить работу парсера. Я пытаюсь сделать так, что бы мне не надо было запускать их самостоятельно, это будет автономная система, там много всего. Вариант scidam не подходит, так как у меня не открывается новых окон, просто запускается интерпретатор в главной консоли, даже скрипт не исполняется.
Офлайн
Mr.AndersonВариант scidam рабочий, просто у тебя консоль видимо другая, не konsole, свою вписывай.
Я пытаюсь сделать так, что бы мне не надо было запускать их самостоятельно
Офлайн
Есть прекрасная утилитка - screen.
В конфиге пишете :
# screenconf
screen python 1.py
split
focus
screen python 2.py
screen -c screenconf
Офлайн