Может кто-то объяснить пожалуйста, зачем нужно наследование от потока в классе в python?
Я заметил это в модуле создание Р2Р-сети, в которой у клиента такой сети в листе хранятся объекты класса нового соединения со своими функциями, который наследован от threading.Thread (наверное эта информация избыточна, так как и без неё вопрос понятен)
И я не понимаю зачем нужно наследование от потока, если однажды эти потоки (объекты класса соединения) стартуются, а потом всякие методы данного класса вызываются все равно основным потоком (я выводил в этих методах название потока и там выводился основной поток)
Возможно не до конца понимаю механику потоков, но тем не менее
class NodeConnection(threading.Thread):
def __init__(self, main_node, sock, id, host, port):
self.sock = sock
...
def send(self, data, encoding_type='utf-8', compression='none'):
...
print(threading.current_thread().name)
self.sock.sendall(data + self.EOT_CHAR)
class Node(threading.Thread):
def __init__(self, host, port, id=None, callback=None, max_connections=0):
self.nodes_outbound = [] # Nodes that we are connected to (US)->N
def send_to_node(self, n, data, compression='none'):
self.message_count_send = self.message_count_send + 1
if n in self.nodes_inbound or n in self.nodes_outbound:
n.send(data, compression=compression)
def connect_with_node(self, host, port, reconnect=False):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.debug_print("connecting to %s port %s" % (host, port))
sock.connect((host, port))
thread_client = self.create_new_connection(sock, connected_node_id, host, port)
thread_client.start()
self.nodes_outbound.append(thread_client)
def create_new_connection(self, connection, id, host, port):
return NodeConnection(self, connection, id, host, port)
if __name__ == "__main__":
node = Node()
node.start(<host>, <port>)
node.send_to_node(<n>, <data>)
То есть в классе NodeConnection в методе send выводится имя потока, то выводится MainThread
И поэтому я не понимаю, зачем в таких случаях вообще нужно наследование от потока, если по итогу все равно выводится имя главного потока (Я не все функции конечно вставил, только те, о которых шла речь в вопрос, дабы не наполнять вопрос лишней информацией)