@GroMan_L

Добавление аргументов к функции с threading?

Я пытаюсь сделать чат на python socket, и для отправки сообщений я использую функцию + threading.
Вот код:
import socket, threading

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind((socket.gethostbyname(socket.gethostname()), 5555))

def send(ip):
    message = input(': ')
    ip.send(message.encode('utf-8'))

server.listen(2)

if __name__ == '__main__':
    th = threading.Thread(target=send, kwargs=({'ip': conn}))
    while True:
        conn, adr = server.accept()

        data = conn.recv(2048)
        print(data.decode('utf-8'))
        th.run(conn)


В строке th = threading.Thread(target=send, kwargs=({'ip': conn})) выдаёт ошибку:

Traceback (most recent call last):
File "D:\Python\Class\main.py", line 14, in
th = threading.Thread(target=send, kwargs=({'ip': conn}))
NameError: name 'conn' is not defined

Как исправить эту ошибку?
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
1. На момент вызова конструктора Thread переменная conn ещё не существует. Тебе нужно создавать поток тогда, когда она уже получила значение.
2. Не вызывай метод run(). Он будет вызван сам, в отдельном потоке. Для запуска этого потока нужно вызвать start(). И имей ввиду, что у тебя send() отрабатывает однажды, и останавливается.

Я бы посоветовал попрактиковаться в работе с потоками, для начала.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы