клиент слушателя сокета в мультипроцессоре не выходил - PullRequest
0 голосов
/ 19 января 2019

Хотите написать сокет-клиент с многопроцессорной обработкой, есть идеи, что не так в следующем коде?Мне не нужно писать сервер на python, но перед прослушиванием мне нужно создать свободный порт на локальном хосте.Порт отправляется на сервер в другом коде.Также я ожидаю, что следующий код будет распечатывать сообщение каждые 1 сек для целей отладки, но оно будет распечатано только один раз.И процесс не включился даже после того, как я установил событие остановки.

def getsocket():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind(('', 0))
        return s
    except Exception as err:
        return None


def PortListener(s, stopper):
    print("Listensing to port for message")
    while not stopper.is_set():
        time.sleep(1)
        print("check message..")
        message = s.recv(4096)
        if message:
            print("received message: {}".format(message))


def logprogress():
    s = getsocket()
    port = s.getsockname()[1]
    print("port number: {}".format(str(port)))
    s.connect(("localhost", port))
    stopper = mp.Event()
    logger = mp.Process(target=PortListener, args=(s, stopper))
    logger.start()
    return logger, stopper


def stopprogress(logger, stopper):
    if logger and stopper:
        print("Stopping listening to worker's progress.")
        stopper.set()
        logger.join()
        print("Exit process")
    else:
        raise TypeError

if __name__ == '__main__':
    logger, stopper = logprogress()
    time.sleep(10)
    stopprogress(logger, stopper)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...