Проблема с многопоточностью Python и соединениями сокетов

Недавно я взял Python и пытаюсь больше узнать о сети. Я столкнулся с проблемой, когда я пытаюсь одновременно слушать и отправлять данные, используя многопоточность. Вот код:

import socket
from threading import Thread


name = ""


s = socket.socket()

def Main():
    print("What is your name?")
    name = input("Name: ")
    Connect()

def Connect():
    host = '127.0.0.1'
    port = 5000


    s.connect((host, port))
    Thread(target=Send()).start()
    print("oh")
    Listen()


def Listen():
    while True:
        data, addr = s.recvfrom(1024)
        data = data.decode('utf-8')
        if not data:
            break
        print(data)

def Send():
    message = input(name + ": ")
    while message != 'q':
        s.send(message.encode("utf-8"))
        message = input(name + ": ")
    s.close()
Main()

Проблема в том, что когда создается Thread, программа застревает в цикле while функции Send() и никогда не вызывает функцию Listen(). Я добавил функцию print() для отладки того, происходит ли что-нибудь после создания потока.

Это результат, который я получил:

Как вас зовут?

Имя: ФлоуР

: тест

:


person FlowR    schedule 24.03.2018    source источник
comment
Можете ли вы показать результат работы программы?   -  person Yuankun    schedule 24.03.2018
comment
Я добавил ввод и включил функцию отладки print()   -  person FlowR    schedule 24.03.2018


Ответы (1)


Вы вызываете функцию Send() вместо того, чтобы передавать ее в качестве параметров, поэтому она блокируется.

Отбросьте () после target=Send():

Thread(target=Send).start()
person Yuankun    schedule 24.03.2018
comment
Большое спасибо! - person FlowR; 24.03.2018