Почему мой поток выполняет целевую функцию до ее запуска? - PullRequest
0 голосов
/ 08 декабря 2018

Я хотел бы понять, почему я должен ждать, пока поток моего получателя завершит свою работу, прежде чем я смогу сделать что-то еще.Я понимаю, что моя функция sock_listen ожидает соединения, вот для чего она предназначена, но я не понимаю, почему это не происходит "внутри" моего потока.

Извините, если это глупый вопрос, но яЯ потерян!Заранее спасибо!

def sock_listen(address, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = (address,port)
    print("Starting listener on %s and port %s" % server_address)
    sock.bind(server_address)
    sock.listen(1)
    while True:
        print("[-] Waiting for connection")
        connection, client_address = sock.accept()
        print("[+] Connection from " + str(client_address))
        data = connection.recv(256)
        while (data) :
            print("[" + time.strftime("%H:%M:%S") + "] " + str(data))
            data = connection.recv(256)

receiver = threading.Thread(sock_listen("localhost",10000))
print("Nothing reaches me, I can not be printed until the sock_connect func is done looping!")

receiver.start()

Моя цель - создать простой TCP-чат, в котором выделенный поток будет обрабатывать и распечатывать входящие сообщения, а основной процесс будет отправлять пользовательский ввод (сообщения)

1 Ответ

0 голосов
/ 08 декабря 2018

Когда вы пишете threading.Thread(sock_listen("localhost",10000)), вы уже вызываете sock_listen и передаете результат этого вызова в конструктор Thread.

Вам необходимо передать вызываемый sock_listen как targetи аргументы для sock_listen отдельно для Thread:

receiver = threading.Thread(target=sock_listen, args=("localhost",10000))

Ваша целевая функция будет вызываться в новом потоке после его запуска.

...