Настройка сервера в Python и получение исключения потока, как мне это исправить? - PullRequest
0 голосов
/ 14 декабря 2018

Я программирую сервер на python и имею несколько потоков, выполняющих разные задачи одновременно.Я пытался обрабатывать потоки всякий раз, когда происходит прерывание клавиатуры.

Вот код для центрального потока:

import shutdownManager as SM
import initManager as IM
import nodeListManager as NLM
import threading

print("<Server Started>")

SM.bootup()

INITTRACKER_THREAD = threading.Thread(target = IM.nodeInitTracker)
NODELISTCLEANER_THREAD = threading.Thread(target = NLM.nodeListCleaner, args = ("NodeList.txt",))
try:
    NODELISTCLEANER_THREAD.start()
    INITTRACKER_THREAD.start()

    NODELISTCLEANER_THREAD.join()
    INITTRACKER_THREAD.join()

except KeyboardInterrupt:
    print("\n<Shutting Server Down>")
    SM.shutdown()

Я посылаю сигналы отключения через файл,и это постоянно проверяется потоком.NODELISTCLEANER_THREAD работает и выходит именно так, как я хочу.Проблема с другим потоком.

Вот код для другого потока:

import shutdownManager as SM
import socket

def nodeInitTracker():
    #Create Socket
    s = socket.socket()

    #HTTP Port, this forces is you to run with admin/root
    port = 80

    #Bind and listen for node and client connections
    s.bind(('', port))
    s.listen(5)
    print('<Socket Bounded>: Now Listening')

    #Client and Node Management
    while True:

        #Accept connection
        c, addr = s.accept()
        print('<CONNECTION ESTABLISHED>: With ', addr[0])
        c.send(('1').encode())

        if SM.checkShutdown():
            print('<Initialization Manager Turned Off>')
            c.close()
            s.close()
            break

        #Perform the process that belongs to their respective device type
        DeviceType = c.recv(1024).decode()
        if DeviceType == 'n':
            #Recieve Node Name
            NodeName = c.recv(1024).decode()
            print('<Node Name Confirmed>: ', NodeName, ' Belongs to ', addr[0])

            #Store Node Name in Node List
            fNodeList = open('NodeList.txt', 'a')
            fNodeList.write(addr[0] + "        " + NodeName + "\n")
            print("<Recorded Node into Node List>: " + NodeName)
            fNodeList.close()
        else:
            #Receive info from the client
            #Please note, that this will be done later. So don't worry about it right now
            print('<Client Connections are not implemented yet>')

        #Close connection with client or node
        c.close()

Это ошибка:

CException игнорируется в:Трассировка (последний вызов был последним): файл "/usr/lib/python3.5/threading.py", строка 1288, в файле _shutdown t.join () "/usr/lib/python3.5/threading.py",строка 1054, в объединенном файле self._wait_for_tstate_lock () "/usr/lib/python3.5/threading.py", строка 1070, в _wait_for_tstate_lock elif lock.acquire (блок, время ожидания): KeyboardInterrupt

Есть ли способ это исправить?

...