Найти - Пользователи
Полная версия: Работа с Нитями
Начало » Python для экспертов » Работа с Нитями
1
felix
Всем доброго времени суток!

Начал было разбираться с Многопоточностью в 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 проходит без следно. Не подскажите в чем может быть дело?
Андрей Светлов
Пример не работает. Я, по крайней мере, не могу понять, что ты хочешь.
Приложи к нему какую-нибудь заглушку для Feeds и убедись, что хотя бы у тебя - запускается
bialix
потому что в методе Main.run() нужно организовать бесконечный цикл. Иначе после первого прохода поток благополучно завершается.
bialix
Андрей Светлов
Пример не работает.
я так думаю, потому что класс Parse и есть класс Feeds.
Андрей Светлов
Ааа. Тогда - да. Не догадался :)
А зачем тогда Main thread. Parse thread можно и так запускакть “по месту”. На один поток меньше.
Если для баланстровки загрузки - то уже ThreadPool нужен.
felix
Просто если я оформляю как сказал 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)
felix
Извиняюсь все работает. Всем большое спасибо!
Андрей Светлов
Отлично, что все работает.
Но я опять-таки возвращаюсь к теме хороших вопросов. Пример был некорректным, хоть и претендовал на полноту.
bialix догадался, в чем дело. Я - нет. Если бы не догадка - долго бы еще выясняли, что к чему. Или ответов не было бы. Или - были бы ответы вроде: “читай статьи по мультипоточке”.
Я не хочу никого обидеть. Просто мне кажется, что правильные вопросы - хороший способ поднять продуктивность форума.
bialix
я опять же согласен. когда я не догадываюсь, то не отвечаю.
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