Уведомления

Группа в Telegram: @pythonsu

#1 Июль 28, 2007 13:05:06

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

Работа с Нитями

Всем доброго времени суток!

Начал было разбираться с Многопоточностью в Python, но сталкнулся с такой проблемой.
Пишу код

class Parse(threading.Thread):
“”“Parse Feed”“”
def __init__(self, feed):
threading.Thread.__init__(self)
self.feed = feed

def run(self):
print self.feed
time.sleep(0.0001)

class Main(threading.Thread):
“”“Main thread”“”
def __init__(self, queue):
self.__queue = queue
threading.Thread.__init__(self)

def run(self):
self.__queue.get().start()
time.sleep(0.0001)
#print f.feed

if __name__ == “__main__”:
queue = Queue.Queue(0)
m = Main(queue).start()
f1 = Feeds("http://feedparser.org/docs/examples/atom10.xml“)
queue.put(f1)
time.sleep(0.0001)
f2 = Feeds(”http://feedparser.org/docs/examples/atom10.xml")
queue.put(f2)
time.sleep(0.0001)


Но почему только выводится на экран результат работы f1, а f2 проходит без следно. Не подскажите в чем может быть дело?



Офлайн

#2 Июль 28, 2007 16:12:42

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Работа с Нитями

Пример не работает. Я, по крайней мере, не могу понять, что ты хочешь.
Приложи к нему какую-нибудь заглушку для Feeds и убедись, что хотя бы у тебя - запускается



Офлайн

#3 Июль 28, 2007 16:24:05

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с Нитями

потому что в методе Main.run() нужно организовать бесконечный цикл. Иначе после первого прохода поток благополучно завершается.



Офлайн

#4 Июль 28, 2007 16:26:14

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с Нитями

Андрей Светлов
Пример не работает.
я так думаю, потому что класс Parse и есть класс Feeds.



Офлайн

#5 Июль 28, 2007 16:56:52

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Работа с Нитями

Ааа. Тогда - да. Не догадался :)
А зачем тогда Main thread. Parse thread можно и так запускакть “по месту”. На один поток меньше.
Если для баланстровки загрузки - то уже ThreadPool нужен.



Отредактировано (Июль 28, 2007 17:01:45)

Офлайн

#6 Июль 28, 2007 18:12:06

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

Работа с Нитями

Просто если я оформляю как сказал bialix то все равно выдается один результат

class Main(threading.Thread):
“”“Main thread”“”
def __init__(self, queue):
self.__queue = queue
threading.Thread.__init__(self)

def run(self):
while True:
self.__queue.get().start()
time.sleep(0.0001)



Офлайн

#7 Июль 28, 2007 18:16:07

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

Работа с Нитями

Извиняюсь все работает. Всем большое спасибо!



Офлайн

#8 Июль 28, 2007 23:30:35

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Работа с Нитями

Отлично, что все работает.
Но я опять-таки возвращаюсь к теме хороших вопросов. Пример был некорректным, хоть и претендовал на полноту.
bialix догадался, в чем дело. Я - нет. Если бы не догадка - долго бы еще выясняли, что к чему. Или ответов не было бы. Или - были бы ответы вроде: “читай статьи по мультипоточке”.
Я не хочу никого обидеть. Просто мне кажется, что правильные вопросы - хороший способ поднять продуктивность форума.



Офлайн

#9 Июль 29, 2007 14:03:09

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с Нитями

я опять же согласен. когда я не догадываюсь, то не отвечаю.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version