0
0 комментариев

Есть простой сервер, который запускается отдельным процессом:

def startServ(pipe):
    Process(target=taskServer, args=(pipe,)).start()
 
def taskServer(pipe):
    host = ""
    port = 50005
    sock = socket(AF_INET, SOCK_STREAM)
    sock.bind((host, port))
    sock.listen(10)
    connectedClients = []
    while True:
        conn, addr = sock.accept()
        print(addr, "is connected")
        connectedClients.append(conn)
        data = conn.recv(1024)
        dataUnpack = pickle.loads(data)
        print(dataUnpack)
 
if __name__ == '__main__':
    (firstpipe, secondpipe) = Pipe()
    root = Tk()
    btn = Button(root, text="start server", command=lambda: startServ(secondpipe))
    btn.pack()
    root.mainloop()

Скажите, пожалуйста, как можно его тормознуть при закрытии основного окна программы?
Можно ли ему через Pipe() какой-то сигнал послать? Вроде такого:

def startServ(secondpipe):
    ...
    while True:
        stopSignal = pipe.recv()
        if stopSignal: break
        conn, addr = sock.accept()
        print(addr, "is connected")
        connectedClients.append(conn)
        data = conn.recv(1024)
        dataUnpack = pickle.loads(data)
        print(dataUnpack)
 
if __name__ == '__main__':
        (firstpipe, secondpipe) = Pipe()
        root = Tk()
        btn = Button(root, text="start server", command=lambda: startServ(secondpipe))
        btn.pack()
        root.mainloop()
        firstpipe.send("stop")

Но почему-то кажется, что после запуска его сразу же заклинит на строке

stopSignal = pipe.recv()

Так как он будет тупо ждать данные из трубы.


Добавить комментарий