Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2008 13:51:23

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

Ну вот, мну задался еще одним тупорылым вопросом:
Есть код такого вида,

with open(base_name) as base:
with open(output_file_name,'w') as output_file:
for link in base:
page_src = urllib.urlopen(link).read()
word_1=page_src.find ('Python')
if word_1>0:
output_file.write (x[:-1]+'\n')
print link
Если не понятно, что он делает-обьясню-читает из файла линки, заходит на эти странички, и если в их тексте встречается заданное слово, записывает линк в отдельный файл

Первое что хотелось бы- это чтобы на недоступных сайтах он не умирал, так как если сайт недоступен, то выдает IOError , типа сайт недоступен, и стает сразу
Хотел сделать через try except, но думаю, как он тогда дальше пойдет после него-как быть в таком случае

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

Вот в общем так вроде бы не очень понятно изьяснился, но я думаю, что идея понятна
П/С/ Просьба ногами не пинать за тупорылые вопросы, понимаю что много хочу, но в сети ковырялся, особо ничего не нашел на эту тему



Офлайн

#2 Окт. 28, 2008 13:57:17

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

Хотел сделать через try except, но думаю, как он тогда дальше пойдет после него-как быть в таком случае
Так и надо. Обработается исключение и продолжится работа.
Второе-хочу еще приделать многопоточность, вроде приделал, но беда-он одно и то же делает в пять потоков smile, что понятное дело и нафиг не нужно, думаю что для многопоточности нужно файл с линками разбить на несколько равных кусков, да беда-не знаю как это сделать таким образом, чтобы файл бился по колтчеству потоков на равные части
Предлагаю не бить файл по количеству потоков а вызывать определенное количество потоков в зависимости от размера файла.
А как реализована многопоточность?

Офлайн

#3 Окт. 28, 2008 14:04:30

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

по первому пункту/
например так:

...
try:
page_src = urllib.urlopen(link).read()
except URLError:
print 'IOError' #печатаем ошибку
continue #переходим к след. линку
else:
#делаем все что собирались
...



Офлайн

#4 Окт. 28, 2008 14:12:56

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

Спасибо огромное за ответы/ Mногопоточность делал приблизительно так,
def process():
with open(base_name) as base:
with open(output_file_name,'w') as output_file:
for link in base:
page_src = urllib.urlopen(link).read()
word_1=page_src.find ('Python')
if word_1>0:
output_file.write (x+'\n')
print link
p1=threading.thread (process)
start p1

Приблизительно так, точно не помню-делал дома, а сейчас на работе, где не могу нормально генту настроить, как результат-браузер работает, а скрипт нет :)

Еще вопросик-как правильно прописать, чтобы скрипт игнорировал любые ошибки, и тупо пытался делать дальше до посинения aka конца света/окончания файла
П/С/
except URLError - эта строчка непонятно почему вызывала возмущение, типа ей не присвоено значение :
NameError: name ‘URLError’ is not defined
сделал так:
except IOError:
заработало, теперь код имеет вид

with open(base_name) as base:
with open(output_file_name,'w') as output_file:
for link in base:
try:
page_src = urllib.urlopen(link+"='").read()
except IOError:
print 'SAYT NEDOSTUPEN'
continue
else:
word_1=page_src.find ('SQL syntax')
if word_1>0:
output_file.write (x[:-1]+"='"+'\n')
print link



Отредактировано (Окт. 28, 2008 14:30:04)

Офлайн

#5 Окт. 28, 2008 14:29:08

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

Если так и делал - должен быть только один поток.

Офлайн

#6 Окт. 28, 2008 14:38:30

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

p1=threading.thread (process)
я опустил еще это:
p2=threading.thread (process)
p3=threading.thread (process)
Т/е/ я запускал одну и ту же функцию несколько раз, из-за чего и возникла идея по поводу того, чтобы разбить файл на несколько кусков, в фнкцию дописать параметр, и чтобы каждый поток запускал функцию с параметром, который будет отвечать за количество строк, которые нужно прочитать в файле

т/е типа такого:

def process(kusok):
with open(base_name) as base:
base=list(base,'kusok')
with open(output_file_name,'w') as output_file:
for link in base:
page_src = urllib.urlopen(link).read()
word_1=page_src.find ('Python')
if word_1>0:
output_file.write (x[:-1]+'\n')
print link
p1=threading.thread (process(1_kusok))
p2=threading.thread (process(2_kusok))
p3=threading.thread (process(3_kusok))
start p1
start p2
start p3
код нерабочий, иллюстрирует саму идею, вот как ее осуществить- не знаю :(, наверное, из-за скудных своих познаний :(

А вообще- я подумываю создать спец/тему-“Tупорылые вопросы by diam123”
Ато их появляется много, а засирать форум не хочу,понимаю, что это нагло с моей стороны, но может в качестве пособия для новичков и пригодиться :) :)
П/С/ я не лезу с первым же возникшим вопросом спрашивать у обитателей форума, я ценю Вашу помощь и Ваше время, я сначала задолбываю гугл, и в большинстве случаев он помогает, но не всегда, и если я задам уж очень тупорылый вопрос, то пожалуйста ткните носом в ответ, без траты Вашего времени



Отредактировано (Окт. 28, 2008 14:51:13)

Офлайн

#7 Окт. 28, 2008 15:57:30

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

Такое реально вообще?



Офлайн

#8 Окт. 28, 2008 16:30:12

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

Реально конечно.
1. Делаете функцию обхода сайтов по переданному ей списку адресов.
2. Вытягиваете список адресов из файла.
3. Вызываете функцию из списка 1 в отдельном потоке и передаёте ей n-элеменов списка.
4. Повторяете пункт 3 для следующих n элементов, пока не закончатся.

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

Отредактировано (Окт. 28, 2008 16:31:51)

Офлайн

#9 Окт. 28, 2008 16:43:29

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

lorien
Вау))) вот это видимо называется мужская логика! Не примите за насмешку, искренне понравился метод решения задачи. А как это в коде можно реализовать? или это слишком громоздко, чтобы выложить сюда?



Офлайн

#10 Окт. 28, 2008 16:47:40

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

:)Опять тупорылый вопрос от меня

Спасибо большое за ответы, дома буду пробовать, еще один вопросик-самоделки, которые у мну получатся-стоит ли их вылаживать в топе как готовое решение задачи, или слить на dumpz.org, или нафик они вообще кому-то нужны? :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version