Я не могу закрыть клиент, пока использую блокировку потока

Это код клиента, он отлично работает как клиент, но когда я выхожу, он показывает мне ошибку

это код

import socket
import threading


tLock = threading.Lock()
shutdown = False

def receving(name, sock):
    while not shutdown:
        try:
            tLock.acquire()
            while True:
                data, addr = sock.recvfrom(1024)
                print (str(data))
        except:
            pass
        finally:
            tLock.release()

host = '127.0.0.1'
port = 0

server = ('127.0.0.1',5000)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
s.setblocking(0)

rT = threading.Thread(target=receving, args=("RecvThread",s))
rT.start()

alias = input("Name: ")
message = input(alias + "-> ")
while message != 'q':
    if message != '':
        s.sendto(bytes(alias + ": " + message,"utf8"), server)
    tLock.acquire()
    message = input(alias + "-> ")
    tLock.release()

shudown = True
rT.join()
s.close()

когда я вставляю q в оболочку, это останавливает оболочку, но клиент работает, не знаю почему

это то, что показывают, когда я нажимаю Ctrl + C

Traceback (most recent call last):
  File "client2.py", line 42, in <module>
    rT.join()
  File "/usr/lib/python3.5/threading.py", line 1054, in join
    self._wait_for_tstate_lock()
  File "/usr/lib/python3.5/threading.py", line 1070, in _wait_for_tstate_lock
    elif lock.acquire(block, timeout):
KeyboardInterrupt
^CException ignored in: <module 'threading' from '/usr/lib/python3.5/threading.py'>
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 1288, in _shutdown
    t.join()
  File "/usr/lib/python3.5/threading.py", line 1054, in join
    self._wait_for_tstate_lock()
  File "/usr/lib/python3.5/threading.py", line 1070, in _wait_for_tstate_lock
    elif lock.acquire(block, timeout):
KeyboardInterrupt

как решить эту просьбу кому-нибудь

0 ответов

Другие вопросы по тегам