gpt4 book ai didi

python - 在python线程中关闭监听套接字

转载 作者:太空狗 更新时间:2023-10-29 20:17:08 25 4
gpt4 key购买 nike

我在尝试了解用于网络通信的套接字时遇到了问题。我创建了一个简单的线程来监听连接并创建用于连接客户端的进程,但我的问题是我无法让线程正确加入,因为我还没有找到取消 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) 并退出主程序来关闭程序,将所有内容交给伟大的垃圾收集器 - 但这似乎是一个糟糕的解决方案。我也尝试过为套接字设置超时,但这会导致 [Errno 35] Resource temporary unavailable(无论实际超时如何,即使我将其设置为年...)。

我做错了什么?我是否以愚蠢的方式设计了线程,或者我是否遗漏了有关接受连接的内容?

最佳答案

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

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

这可行,但仍然感觉它可能不是最优的......

关于python - 在python线程中关闭监听套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com