Форум сайта python.su
SkylerПотоки нормально работают с ожиданием, поэтому и быстро.
Хм, но ведь кол-во потоков под 100 дает реально быструю производительность, задания выполняются быстро, исключая последние несколько. А в 3 потока вообще о производительности говорить нельзя.
SkylerПоясню.
Вот про это можно поподробней? Т.е. как бы перегружая канал выполнением большого кол-ва задач за короткое время, канал начинает “тупить”? А если применять задержки, не загружая его сильно?
SkylerСрочно читаем документацию: ожидание в сто секунд, это, конечно, интересно, но явно не то, чего вы ожидаете.
time.sleep(100)
Офлайн
Код хотя бы правильный?)
#!/usr/bin/python
import urllib, sys, threading, Queue, datetime, time
start = datetime.datetime.today().second+int(datetime.datetime.today().minute)*60
proxylist = open('proxy.txt', 'r')
count = len(proxylist.readlines())
proxylist = open('proxy.txt', 'r')
goodproxy = open('goodproxy.txt', 'w')
countproxy = count
class thread(threading.Thread):
def run(self):
while 1:
global countproxy
proxy = proxypool.get()
#time.sleep(0.1)
if proxy != None:
proxies = {'http': 'http://'+proxy}
try:
urllib.urlopen(url, proxies=proxies)
goodproxy.write(proxy)
countproxy = countproxy - 1
print countproxy
#sys.stdout.write('\r'+'Proxy left -- '+'%d' % countproxy)
#sys.stdout.flush()
except:
countproxy = countproxy - 1
print countproxy
#sys.stdout.write('\r'+'Proxy left -- '+'%d' % countproxy)
#sys.stdout.flush()
proxypool.task_done() #не знаю, зачем это здесь
proxypool = Queue.Queue()
threads = 80
url = 'http://google.ru'
#t = thread()
# заполнил очередь
for line in proxylist.readlines():
proxypool.put(line)
# пустил потоки
for i in range(threads):
t = thread()
t.setDaemon(True) #и это
t.start()
#for line in proxylist.readlines():
# proxypool.put(line)
while 1:
if countproxy == 1:
proxylist.close()
goodproxy.close()
end = datetime.datetime.today().second+int(datetime.datetime.today().minute)*60
result = int(end)-int(start)
print ''
print '--------'
print 'Time: '+str(result)
while 1:
pass
Отредактировано (Окт. 30, 2009 18:22:04)
Офлайн
а я б использовал urllib2
Офлайн
sypper-pit
Разница?
Офлайн
Skylerможет: канал 800кбит, а скачиваний 100кбАйт, тогда все сходится :)
В остальное время не больше 100кбит, а канал у меня на 800.
Офлайн
Skylerя думаю что этот кусок кода будет производить основную нагрузку на процессорwhile 1:
pass
Отредактировано (Ноя. 1, 2009 19:55:13)
Офлайн
SkylerРабота с прокси проще…
Разница?
Офлайн
Skyler, у меня сейчас нет времени вчитываться, но бесконечный пасс взорвал мой мозг и вскипятил тебе чай на проце.
И sleep na воткнул вовсе не там… Подумай ещё.
Отредактировано (Ноя. 3, 2009 00:29:26)
Офлайн
Я тут один туториал читал по pygame, так там приводится пример с бесконечным циклом:
def input(events):
for event in events:
if event.type == QUIT:
sys.exit(0)
else:
print event
while True:
input(pygame.event.get())
Офлайн
Нет смысла. К тому же это - tutorial. Не судите его строго.
Офлайн