我正在尝试创建分布式哈希表。有一个线程。但是线程中的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()
答案 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个下划线包围。对于魔术。