Как однозначно идентифицировать каждый клиентский поток среди остальных в Python - PullRequest
0 голосов
/ 20 октября 2018

Я не могу найти способ уникальной идентификации каждого потока, который создается и хранится на сервере.Каждый клиентский поток должен хранить свою собственную информацию, которая используется для передачи информации обратно соответствующему клиенту.Очевидные детали для создания сервера опущены:

import sys
from threading import Thread
import socket
import traceback


def client_thread(conn, ip, port, MAX_BUFFER_SIZE = 4096):
    while 1:
    # the input is in bytes, so decode it
        input_from_client_bytes = conn.recv(MAX_BUFFER_SIZE)
            if not input_from_client_bytes:
                break

        # decode input and strip the end of line
        input_from_client = input_from_client_bytes.decode("utf8").rstrip()
        aString = ''
        if (input_from_client.startswith('LOAD BOARD')):
            array = input_from_client.split('~')
            aString = array[1]
        vysl = aString.encode("utf8")  # encode the result string
        conn.sendall(vysl)  # send it to client
    conn.close()  # close connection
    print('Connection ' + ip + ':' + port + " ended")

    while True:
        conn, addr = soc.accept()
        ip, port = str(addr[0]), str(addr[1])
        print('Accepting connection from ' + ip + ':' + port)

        try:
            Thread(target=client_thread, args=(conn, ip, port)).start()
        except:
            traceback.print_exc()
    soc.close()

start_server() 

Одно предложение, которое я прочитал, - это создать файл python, добавить туда все переменные и импортировать его на сервер, но все остальные потоки редактируют значения одинаково.время все станет странным.Каждый поток захочет использовать методы, которые будет предоставлять сервер.Поскольку данные не могут быть обменены между методом из одного класса и методом из другого, каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 20 октября 2018

Вы можете указать имена потоков, используя параметр name:

Thread(target=client_thread, args=(conn, ip, port), name=str(ip) + ":" + str(port)).start()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...