2013-11-16 2 views
-1

Я пытаюсь создать распределенную хэш-таблицу. Есть нить. Но функция run в потоке can not находит переменную sock, которую я инициализирую в конструкторе.Python-интерпретатор не смог найти переменную класса

Вот код -

from socket import * 
from threading import * 

class DHT(Thread): 
    def _init_(self): 
     self.sock = socket(AF_INET, SOCK_STREAM) 
     self.sock.bind(('127.0.0.1', 5000)) 
     self.sock.listen(1) 

    def run(self): 
     while 1: 
      conn, addr = self.sock.accept() 
      data = conn.recv(20) 
      message, port, value = data.split("-") 
      if message == 'route message': 
       self.route_message(port, value) 
      elif message == 'check alive': 
       self.check_alive(port, value) 
      elif message == "new node": 
       self.new_node(port, value) 
      elif message == "update hash": 
       self.update_hash(port, value) 
      conn.close() 

    def route_message(self, port, value): 
     print("Routing Message") 
    def check_alive(self, port, value): 
     print("Checking Alive") 

    def new_node(self, port, value): 
     print("New Node") 

    def update_hash(self, port, value): 
     print("Updating Hash") 

if __name__ == '__main__': 
    DHT().start() 

ответ

1

Init как особый метод needs two underscores на каждой стороне будет работать.

def __init__(self): 
    ... 

Вот почему вашей розетки нет. Он никогда не создается.

Все фотографии всегда окружены 2 символами подчеркивания. Для магии.

+0

теперь он говорит - AttributeError: объект «DHT» не имеет атрибута «_initialized» –

+1

Вам нужно вызвать 'Thread .__ init __()' перед тем, как сделать что-нибудь еще в потоке. – RyPeck

+0

Что мне делать внутри Thread .__ init __()? –

2

Вы должны изменить первые несколько строк следующим образом (те двойные подчеркивания на уже отмечалась обе сторона init как RyPeck):

class DHT(Thread): 
    def __init__(self): 
     Thread.__init__(self) 
     self.sock = socket(AF_INET, SOCK_STREAM) 

DHT установка получить-х по инициализации объекта Thread части, а затем его собственный материал

Смежные вопросы