Уведомления

Группа в Telegram: @pythonsu

#1 Июль 17, 2016 04:13:42

Mr.Anderson
Зарегистрирован: 2015-02-06
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

Ребят, всем привет. Есть такой вот вопрос.
Что лучше подойдет для решения следующей задачи?
Есть у меня парсер поисковой выдачи. Парсить может, скажем из гугла и яху, в стандартном режиме все работает последовательно, сначала парсится гугл, потом яху, и все это пишется в один файл. Мне необходимо следующие, Что бы при запуске скрипта, одновременно парсился и гугл и яху, и все это писалось в отдельный файл для каждого скрипта.
Для наглядности, представьте, как в одной консоли вы запускаете главный скрипт, затем открывается еще две консоли для гугла и яху и каждый из них работает параллельно с другим. Как реализовать подобное?
Подойдут ли такие средства как subprocess и multiprocessing?
Или есть еще варианты?

Офлайн

#2 Июль 17, 2016 08:34:44

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

Mr.Anderson
писалось в отдельный файл для каждого скрипта.
Mr.Anderson
Подойдут ли такие средства как subprocess и multiprocessing?
Подойдут. только либо то либо другое.
Mr.Anderson
Или есть еще варианты?
Вариантов огромное число. Но их есть смысл рассматривать когда будут проблемы, например с агрегированием результатов или нехваткой оперативки и т.п.



Офлайн

#3 Июль 17, 2016 15:59:16

Mr.Anderson
Зарегистрирован: 2015-02-06
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

doza_and
Просто в результате ожидается, что будет большой объем данных. Примерно 4 парсера должны будут парсить 4 поисковика, и счет сайтов будет в тысячном эквиваленте.

Офлайн

#4 Июль 17, 2016 17:09:09

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

Mr.Anderson
Я бы использовал aiohttp для скачивания данных, а потом по мере их готовности их парсил с помощью lxml.
Сам парсер (lxml) надо только вынести или в поток или в отдельный процесс.

Да, собственно говоря в одном проекте своем я так и сделал, все работает довольно быстро.

Отредактировано alex925 (Июль 17, 2016 17:11:13)

Офлайн

#5 Июль 18, 2016 04:45:50

Mr.Anderson
Зарегистрирован: 2015-02-06
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

У меня уже есть готовые парсеры, мне лишь нужно решить задачу.
Что бы при запуске скрипта, назовем его main.py у меня открывались сразу 2 новых консоли(работаю в линкусе), и в каждой из них работал свой парсер. И что бы я видел весь этот процесс.
Такой вариант не подходит, нет новых окон консоли и скрипты запускаются поочередно, а не одновременно.

 import subprocess
subprocess.call(["python", "myscript.py"])
subprocess.call(["python", "myscript2.py"])

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

Офлайн

#6 Июль 18, 2016 05:43:51

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

Что-то вроде этого:


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



Отредактировано scidam (Июль 18, 2016 05:47:38)

Офлайн

#7 Июль 18, 2016 17:13:17

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

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

Офлайн

#8 Июль 19, 2016 02:49:01

Mr.Anderson
Зарегистрирован: 2015-02-06
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

alex925
Тут дело не в ускорении. В его прямом понимании. Я не пытаюсь ускорить работу парсера. Я пытаюсь сделать так, что бы мне не надо было запускать их самостоятельно, это будет автономная система, там много всего. Вариант scidam не подходит, так как у меня не открывается новых окон, просто запускается интерпретатор в главной консоли, даже скрипт не исполняется.

Офлайн

#9 Июль 19, 2016 06:59:23

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

Mr.Anderson
Я пытаюсь сделать так, что бы мне не надо было запускать их самостоятельно
Вариант scidam рабочий, просто у тебя консоль видимо другая, не konsole, свою вписывай.

Офлайн

#10 Июль 19, 2016 09:07:08

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Параллельное выполнение скриптов

Есть прекрасная утилитка - screen.

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

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

Запускаете :

screen -c screenconf

Результат :

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version