当前位置:  开发笔记 > 编程语言 > 正文

在python线程中关闭侦听套接字

如何解决《在python线程中关闭侦听套接字》经验,为你挑选了1个好方法。

我试图了解网络通信的套接字时遇到问题.我做了一个简单的线程,它监听连接并创建连接客户端的进程,我的问题是我无法正常连接线程,因为我还没有找到取消socket.accept()的方法 - 调用当我想退出该计划.

我的代码看起来像这样;

class ServerThread( threading.Thread ):

    def __init__(self, queue, host, port):
        threading.Thread.__init__(self)
        self.queue = queue
        self.running = True
        self.hostname = host
        self.port = port

    def run(self):
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.bind((self.hostname, self.port))
        self.socket.listen(1)
        while self.running:
            try:
                conn, address = self.socket.accept()
                process = Process(target=server_slave, args=(conn, address, self.queue))
                process.daemon = True
                process.start()
            except socket.timeout:
                pass

    def stop(self):
        self.running = False
        self.socket.close()

我已经设法通过设置self.setDaemon(True)并退出主程序来关闭程序,将所有内容交给伟大的垃圾收集器 - 但这似乎是一个糟糕的解决方案.我也试过设置socket的超时但是这会导致获取[Errno 35] Resource temporarily unavailable(无论实际的超时,即使我将它设置为年...).

我究竟做错了什么?我是否以愚蠢的方式设计了线程,还是我错过了接受连接的内容?



1> Norling..:

让线程关闭的一种方法似乎是建立与套接字的连接,从而继续完成线程.

def stop(self):
    self.running = False
    socket.socket(socket.AF_INET, 
                  socket.SOCK_STREAM).connect( (self.hostname, self.port))
    self.socket.close()

这有效,但它仍然感觉可能不是最佳的......

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有