Форум сайта python.su
Пробема с потоками
Через раз, то программа ничго не выдаёт, то выдаёт ошибку вида
вот код
import thread
class MyClass:
def __init__(self,name):
self.name = name
self.output = "output"
self.input = "free"
def send_mess(self,resiver):
thread.start_new(resiver.get_mess,(self,self.output))
#print self.name , 'said I DID IT!'
def get_mess(self,sender,message):
self.input = message
print self.name ,'from',sender.name, self.input
if message!='back':
sender.get_mess(self,'back')
def main():
M1 = MyClass('Alex')
M2 = MyClass('Sasha')
#M2.get_mess('mama mia')
M2.send_mess(M1)
#print M1.name
#print M2.output
return 0
if __name__ == '__main__':
main()
Офлайн
Alex_Kutsan
а зачем thread, когда есть threading?
Офлайн
Спасибо, решил так
def send_mess(self,resiver):
T = threading.Thread(None,resiver.get_mess,None,(self,self.output))
T.start()
print '/n ',self.name , 'said I DID IT!'
Офлайн
Alex_Kutsan
Во-первых, во многих случаях гораздо проще самому описать класс потока, унаследовав его от threading.Thread и переопределив в нем метод run(), который и будет играть роль потоковой функции. Это есть в доках, а еще это описано в блоге у Андрея Светлова: http://asvetlov.blogspot.com/2010/11/1.html
Во-вторых, вы пишете на питоне, а не на C. При создании объекта потока запускается неявный контроль, и (если не указан тот же setDaemon) скрипт для завершения ждет в главном потоке завершения всех дочерних. Вручную это можно сделать с помощью T.join().
И да, в питоне есть свой Garbage Collector, разумеется. Читайте теорию.
Отредактировано (Авг. 4, 2011 17:16:15)
Офлайн