Найти - Пользователи
Полная версия: Многопоточный генератор HTTP запросов
Начало » Web » Многопоточный генератор HTTP запросов
1
dimik
Привет.
Для собственного развития и тренировки хочется написать простой и быстрый скрипт, который будет обходить урлы из некоторой базы, парсить контент, помещая найденные результаты тоже в базу.

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

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

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()
alafin
Все сделано великолепно ;)
slivlen
Вместо сокетов лучше urllib использовать. Он и POST поддерживает и работу через прокси. Да и вообще нафига велосипед изобретать когда есть готовое решение?
dimik
спасибо, 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)

в винде я думаю это не будет работать…
slav0nic
dimik, threading.activeCount()> 1… именно для для того, чтоб основной процесс не заверился раньше тредов.
http://www.intuit.ru/department/pl/python/11/
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