Найти - Пользователи
Полная версия: :)Опять тупорылый вопрос от меня
Начало » Python для новичков » :)Опять тупорылый вопрос от меня
1 2
diam123
Ну вот, мну задался еще одним тупорылым вопросом:
Есть код такого вида,
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, но думаю, как он тогда дальше пойдет после него-как быть в таком случае

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

Вот в общем так вроде бы не очень понятно изьяснился, но я думаю, что идея понятна
П/С/ Просьба ногами не пинать за тупорылые вопросы, понимаю что много хочу, но в сети ковырялся, особо ничего не нашел на эту тему
Ferroman
Хотел сделать через try except, но думаю, как он тогда дальше пойдет после него-как быть в таком случае
Так и надо. Обработается исключение и продолжится работа.
Второе-хочу еще приделать многопоточность, вроде приделал, но беда-он одно и то же делает в пять потоков smile, что понятное дело и нафиг не нужно, думаю что для многопоточности нужно файл с линками разбить на несколько равных кусков, да беда-не знаю как это сделать таким образом, чтобы файл бился по колтчеству потоков на равные части
Предлагаю не бить файл по количеству потоков а вызывать определенное количество потоков в зависимости от размера файла.
А как реализована многопоточность?
shiza
по первому пункту/
например так:
...
try:
page_src = urllib.urlopen(link).read()
except URLError:
print 'IOError' #печатаем ошибку
continue #переходим к след. линку
else:
#делаем все что собирались
...
diam123
Спасибо огромное за ответы/ 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
Ferroman
Если так и делал - должен быть только один поток.
diam123
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”
Ато их появляется много, а засирать форум не хочу,понимаю, что это нагло с моей стороны, но может в качестве пособия для новичков и пригодиться :) :)
П/С/ я не лезу с первым же возникшим вопросом спрашивать у обитателей форума, я ценю Вашу помощь и Ваше время, я сначала задолбываю гугл, и в большинстве случаев он помогает, но не всегда, и если я задам уж очень тупорылый вопрос, то пожалуйста ткните носом в ответ, без траты Вашего времени
diam123
Такое реально вообще?
Ferroman
Реально конечно.
1. Делаете функцию обхода сайтов по переданному ей списку адресов.
2. Вытягиваете список адресов из файла.
3. Вызываете функцию из списка 1 в отдельном потоке и передаёте ей n-элеменов списка.
4. Повторяете пункт 3 для следующих n элементов, пока не закончатся.

Вопросы лучше задавай каждый в отдельной теме, по смыслу. Другим легче найти будет, если похожие возникнут. А в одной теме разношерсные вопросы превратят тред в свалку.
proDiva
lorien
Вау))) вот это видимо называется мужская логика! Не примите за насмешку, искренне понравился метод решения задачи. А как это в коде можно реализовать? или это слишком громоздко, чтобы выложить сюда?
diam123
Спасибо большое за ответы, дома буду пробовать, еще один вопросик-самоделки, которые у мну получатся-стоит ли их вылаживать в топе как готовое решение задачи, или слить на dumpz.org, или нафик они вообще кому-то нужны? :)
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