Найти - Пользователи
Полная версия: Параллельное выполнение скриптов
Начало » Python для новичков » Параллельное выполнение скриптов
1 2
Mr.Anderson
Ребят, всем привет. Есть такой вот вопрос.
Что лучше подойдет для решения следующей задачи?
Есть у меня парсер поисковой выдачи. Парсить может, скажем из гугла и яху, в стандартном режиме все работает последовательно, сначала парсится гугл, потом яху, и все это пишется в один файл. Мне необходимо следующие, Что бы при запуске скрипта, одновременно парсился и гугл и яху, и все это писалось в отдельный файл для каждого скрипта.
Для наглядности, представьте, как в одной консоли вы запускаете главный скрипт, затем открывается еще две консоли для гугла и яху и каждый из них работает параллельно с другим. Как реализовать подобное?
Подойдут ли такие средства как subprocess и multiprocessing?
Или есть еще варианты?
doza_and
Mr.Anderson
писалось в отдельный файл для каждого скрипта.
Mr.Anderson
Подойдут ли такие средства как subprocess и multiprocessing?
Подойдут. только либо то либо другое.
Mr.Anderson
Или есть еще варианты?
Вариантов огромное число. Но их есть смысл рассматривать когда будут проблемы, например с агрегированием результатов или нехваткой оперативки и т.п.
Mr.Anderson
doza_and
Просто в результате ожидается, что будет большой объем данных. Примерно 4 парсера должны будут парсить 4 поисковика, и счет сайтов будет в тысячном эквиваленте.
alex925
Mr.Anderson
Я бы использовал aiohttp для скачивания данных, а потом по мере их готовности их парсил с помощью lxml.
Сам парсер (lxml) надо только вынести или в поток или в отдельный процесс.

Да, собственно говоря в одном проекте своем я так и сделал, все работает довольно быстро.
Mr.Anderson
У меня уже есть готовые парсеры, мне лишь нужно решить задачу.
Что бы при запуске скрипта, назовем его main.py у меня открывались сразу 2 новых консоли(работаю в линкусе), и в каждой из них работал свой парсер. И что бы я видел весь этот процесс.
Такой вариант не подходит, нет новых окон консоли и скрипты запускаются поочередно, а не одновременно.
 import subprocess
subprocess.call(["python", "myscript.py"])
subprocess.call(["python", "myscript2.py"])

Так как решить мне мою задачу? Буду благодарен за примеры кода.
scidam
Что-то вроде этого:


 import subprocess
proc1 = subprocess.Popen(['konsole', '-e', 'python', 'myscript.py'])
proc2 = subprocess.Popen(['konsole', '-e', 'python', 'myscript2.py'])



alex925
Mr.Anderson
У меня уже есть готовые парсеры, мне лишь нужно решить задачу.
Тогда я бы использовал multiprocessing, в этом случае можно организовать обмен информацией между процессами (причем различными способами, какой душе угодно можно использовать) и организовать обработку как захочешь.
А вообще если хочешь быстро обрабатывать данные, то синхронный код не будет быстро работать, нужно как ни крути будет переписывать получение данных.
Mr.Anderson
alex925
Тут дело не в ускорении. В его прямом понимании. Я не пытаюсь ускорить работу парсера. Я пытаюсь сделать так, что бы мне не надо было запускать их самостоятельно, это будет автономная система, там много всего. Вариант scidam не подходит, так как у меня не открывается новых окон, просто запускается интерпретатор в главной консоли, даже скрипт не исполняется.
alex925
Mr.Anderson
Я пытаюсь сделать так, что бы мне не надо было запускать их самостоятельно
Вариант scidam рабочий, просто у тебя консоль видимо другая, не konsole, свою вписывай.
ayb
Есть прекрасная утилитка - screen.

В конфиге пишете :

# screenconf
screen python 1.py
split
focus
screen python 2.py

Запускаете :

screen -c screenconf

Результат :
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB