Форум сайта python.su
Все никак не могу разобраться с потоками :( Освоил только создание одного потока для выполнения фоновой задачи…
Продемонстрируйте мне пожалуйста работу с потоками на примере, например, брутфорса.
Сам пока написал следующее:
#!/usr/bin/python
import re
import sys
import threading
import urllib2
import time
old = time.time()
password = 'hello'
passwords = [тут множество паролей]
results = []
class Check(threading.Thread):
def __init__(self, pword):
threading.Thread.__init__(self)
self.pword = pword
def run(self):
if self.pword == password:
print 'Done:', self.pword
sys.exit(0)
else:
print 'Error:', self.pword
for p in passwords:
current = Check(p)
results.append(current)
current.start()
print time.time() - old
Офлайн
Конечно. Создание потока - дорогая операция.
Попробуйте подумать, за счет чего использование потоков может ускорить ваш чудесный алгоритм?
Офлайн
за счет одновременного выполнения нескольких задач, например =)
Офлайн
Просто, если можно - правильный пример, чтобы я разобрался.
Офлайн
С примером неинтересно. Да и не прочувствуешь.
Сколько ядер на твоей машине? Два, скорее всего.
А пару-тройку лет назад так вообще больше одного встречалось очень редко.
Тем не менее даже тогда многопоточные программы имели смысл, и их писали постоянно.
Зачем? Переключение потоков - операция тоже недешевая, а одновременно не получится выполнять задач больше, чем ядер на машине.
Что можно ускорить?
Кстати, в твоем примере пока не начнешь дергать urllib2 - не будет никакого ускорения от потоков, как не крути.
Почему?
P.S.
Со строгой одновременностью в Питоне туго - есть GIL.
Офлайн
Сколько ядер на твоей машине? Два, скорее всего.У меня дюрон 8 летней давности :)
Кстати, в твоем примере пока не начнешь дергать urllib2 - не будет никакого ускорения от потоков, как не крути.Даже не знаю :)
Почему?
Отредактировано (Июнь 27, 2009 21:29:02)
Офлайн
при одном ядре - один поток одновременно, а никак не процесс. (с какой стати, черный шаман будет подколдовывать?)
Процессы управляют ресурсами: в первую очередь памятью и далее по мелочи: открытые файлы, сокеты и проч.
Потоки - это вычислители, исполнятели кода.
В каждом процессе живет как минимум один поток. Программист может создать еще.
Бардак. И думать неохота…
Писать долгую телегу с объяснением базовых понятий параллелизма мне неохота.
Поэтому почитай что-нибудь сам, а когда вопросы станут поосмысленнее - можно продолжить.
Где читать - не знаю. В википедии наверняка кое-то есть. Язык программирования не важен - потоки практически везде одинаковые.
Может, другие камрады со ссылками помогут.
Офлайн
Прочитал в вики:
процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся «параллельно»Наверное, я неправильно понял. Буду читать, спасибо! :)
Офлайн