Найти - Пользователи
Полная версия: Problem with Threads
Начало » Python для новичков » Problem with Threads
1
Alex_Kutsan
Пробема с потоками

Через раз, то программа ничго не выдаёт, то выдаёт ошибку вида


вот код

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()
Enchantner
Alex_Kutsan
а зачем thread, когда есть threading?
Alex_Kutsan
Спасибо, решил так
	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!'
кстати подскажите Это не сильно некрасивая реализация, мне что-то она не нравится. И ещё, теорию в этом смысле а не сильно знаю. Я создал экземпляр класса, функция завершилась, ссылку потерял. А сам объект, не удалился? разве это не утечка памяти? Если что, сильно не пинайте, про классы узнал только что из вики учебника, или в питоне как в Яве есть механизм сборки мусора?
Enchantner
Alex_Kutsan
Во-первых, во многих случаях гораздо проще самому описать класс потока, унаследовав его от threading.Thread и переопределив в нем метод run(), который и будет играть роль потоковой функции. Это есть в доках, а еще это описано в блоге у Андрея Светлова: http://asvetlov.blogspot.com/2010/11/1.html
Во-вторых, вы пишете на питоне, а не на C. При создании объекта потока запускается неявный контроль, и (если не указан тот же setDaemon) скрипт для завершения ждет в главном потоке завершения всех дочерних. Вручную это можно сделать с помощью T.join().

И да, в питоне есть свой Garbage Collector, разумеется. Читайте теорию.
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