Python解释器找不到类变量

时间:2013-11-16 07:12:50

标签: python multithreading constructor self class-variables

我正在尝试创建分布式哈希表。有一个线程。但是线程中的run函数找不到我在构造函数中初始化的sock变量。

这是代码 -

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()

2 个答案:

答案 0 :(得分:2)

您必须按如下方式更改前几行(这些是双下划线) 正如RyPeck所指出的那样init的双方都是:

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

DHT通过初始化Thread对象部分然后自己的东西

来获得设置

答案 1 :(得分:1)

初始化作为要运行的每一方的特殊方法needs two underscores

def __init__(self):
    ...

这就是你的插座不存在的原因。它永远不会被创造出来。

所有Python的magic methods总是被2个下划线包围。对于魔术。