Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Многопоточный генератор HTTP запросов [RSS Feed]

#1 Ноя. 28, 2006 17:55:38

dimik
От:
Зарегистрирован: 2006-11-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточный генератор HTTP запросов

Привет.
Для собственного развития и тренировки хочется написать простой и быстрый скрипт, который будет обходить урлы из некоторой базы, парсить контент, помещая найденные результаты тоже в базу.

Для простоты - вместо базы я пока просто обхожу урлы из кортежа

Хочется услышать комментарии опытных питонщиков,
и предложения по улучшению

import socket
import threading

PATHS = (“/yandsearch?stype=www&nl=1&text=sex”, “/yandsearch?stype=www&nl=1&text=drugs”, “/yandsearch?text=rock-n-roll&stype=www”)
HOST = “www.yandex.ru

class MTConn(threading.Thread):
“”“MultiThreads Connector”“”

def __init__(self, path):
self.path = path or “/”
self.soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
threading.Thread.__init__(self, name = path)

def _gethost(self):
self.soc.connect((HOST, 80))
self.soc.send(“GET %s HTTP/1.0\r\nHost: %s\r\n\r\n” % (self.path, HOST))
return self.soc.makefile().read().decode('cp1251')

def run(self):
print “process: %s \n %s \n\n” % (self.path, self._gethost())


conns =
for conn in conns: conn.start()



Офлайн

#2 Ноя. 28, 2006 22:04:34

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Многопоточный генератор HTTP запросов

Все сделано великолепно ;)



Офлайн

#3 Ноя. 29, 2006 05:31:31

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Многопоточный генератор HTTP запросов

Офлайн

#4 Ноя. 29, 2006 10:56:44

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточный генератор HTTP запросов

Вместо сокетов лучше urllib использовать. Он и POST поддерживает и работу через прокси. Да и вообще нафига велосипед изобретать когда есть готовое решение?



Офлайн

#5 Дек. 1, 2006 01:52:03

dimik
От:
Зарегистрирован: 2006-11-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточный генератор HTTP запросов

спасибо, j2a
хороший трэд про многопоточное программирование.

хотя меня смутила строчка:

while threading.activeCount()> 1: time.sleep(1)
Это чтобы не завершился главный поток до завершения работы остальных?

еще интересует использование замков и семафоров для доступа к ресурсам.

Вместо сокетов лучше urllib использовать. Он и POST поддерживает и работу через прокси. Да и вообще нафига велосипед изобретать когда есть готовое решение?
Конешно, Вы правы,
решая эту задачу быстро и рационально,
я бы предпочел написать

urllib2.urlopen('www.ya.ru')
Тем более это правильно что, основную часть времени работы программы займет подключение и ожидание ответа от сервера, - использование сокетов как стрельба по воробьям из пушки.

Я использовал сокеты не потому что я бородатый сисадмин. :)
Просто мне хочется написать свою логику, свой класс, модуль. Построить из экземпляров объектов работающую архитектуру, наладить хранение, обработку и передачу данных между ними.

мне трудно и неуверенно дается,
т.к. Я всегда использовал функциональное программирование и слегка туплю в ООП.

И питон начал изучать чтобы ООП подтянуть,
и к удивлению обнаружил что в функциональном программирование он безусловно тоже РУЛИТ!



PS:
Все надстройки над сокетами, такие как httplib и еще более высокоуровневая urllib,
позволят решить 95% задач, однако с помощью сокетов можно делать все без ограничений,
даже самому собирать IP пакеты, определенным образом их настроив:

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

в винде я думаю это не будет работать…



Офлайн

#6 Дек. 1, 2006 16:26:27

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2252
Репутация: +  40  -
Профиль   Отправить e-mail  

Многопоточный генератор HTTP запросов

dimik, threading.activeCount()> 1… именно для для того, чтоб основной процесс не заверился раньше тредов.
http://www.intuit.ru/department/pl/python/11/

Офлайн

  • Начало
  • » Web
  • » Многопоточный генератор HTTP запросов[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version